資源簡介
大連理工大學軟件學院編譯技術課程——詞法分析上機實驗
實驗目的:對循環語句和條件判斷語句編寫詞法分析編譯程序,只能通過一遍掃描完成。(用c++實現)
實驗要求:
(1) 關鍵字:
for if then else while do
所有關鍵字都是小寫。
(2)運算符和分隔符:
: = + - * / <= >= ; ( ) #
(3)其他標識符(ID)和整型常數(NUM),通過以下正規式定義:
ID=letter(letter | digit)*
NUM=digit digit*
(4)空格由空白、制表符和換行符組成。空格一般用來分隔ID、NUM、運算符、分隔符和關鍵字,詞法分析階段通常被忽略。
各種詞法單元對應的詞法記號如下:
詞法單元 詞法記號 詞法單元 詞法記號
for 1 : 17
if 2 := 18
then 3 < 20
else 4 21
while 5 23
letter(letter+digit)* 10 >= 24
digit digit* 11 = 25
+ 13 ; 26
- 14 ( 27
* 15 ) 28
/ 16 # 0
詞法分析程序的功能
輸入:源程序
輸出:二元組(詞法記號,屬性值/其在符號表中的位置)構成的序列。
例如:對源程序
x:=5; if (x>0) then x:=2*x+1/3; else x:=2/x; #
經詞法分析后輸出如下序列:
(10,’x’)(18, :=) (11,5) (26, ;) (2, if ) (27,( )……
1.幾點說明:
(1)關鍵字表的初值。
關鍵字作為特殊標識符處理,把它們預先安排在一張表格中(稱為關鍵字表),當掃描程序識別出標識符,查關鍵字表。如能查到匹配的單詞,則該單詞的關鍵字,否則為一般標識符。關鍵表為一個字符串數組,其描述如下:
char *keyword[6]={”for”, ”if”, ”then” ,”else”,”while”, ”do” };
(2) 程序中需要用到的主要變量為 token , id和num.
1)id用來存放構成詞法單元的字符串;
2)num用來存放整數(可以擴展到浮點數和科學計數法表示);
3)token用來存放詞法單元的詞法記號。
可以參考下面的代碼:
do{
lexical(); //將詞法單元對應的記號保存到token中,屬性值保存到num或者id中
switch(token) {
case 11: printf ("(token, %d\n) ", num); break;
case -1: printf("error!\n");break;
default: printf("(%d,%s)\n", token, id);
}
}while (token!=0);

代碼片段和文件信息
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????10512??2018-11-19?16:02??test.zip
-----------?---------??----------?-----??----
?????文件???????10512??2018-11-19?16:02??test.zip
評論
共有 條評論