北華航天工業學院
《編譯原理》課程實驗報告
課程實驗題目: 詞法分析器實驗
作者所在系部: 電腦科學與工程系
作者所在專業: 電腦科學與技術
作者所在班級: b08512
作者學號18
作者姓名 : 李桂丁
指導教師姓名: 李建義
完成時間 : 2023年3月26日
一、實驗目的
了解詞法分析程式的兩種設計方法:1.根據狀態轉換圖直接程式設計的方式;2.利用dfa編寫通用的詞法分析程式。
二、實驗內容及要求
1.根據狀態轉換圖直接程式設計
編寫乙個詞法分析程式,它從左到右逐個字元的對源程式進行掃瞄,產生乙個個的單詞的二元式,形成二元式(記號)流檔案輸出。在此,詞法分析程式作為單獨的一遍,如下圖所示。
具體任務有:
(1)組織源程式的輸入
(2)拼出單詞並查詢其類別編號,形成二元式輸出,得到單詞流檔案
(3)刪除注釋、空格和無用符號
(4)發現並定位詞法錯誤,需要輸出錯誤的位置在源程式中的第幾行。將錯誤資訊輸出到螢幕上。
(5)對於普通識別符號和常量,分別建立識別符號表和常量表(使用線性表儲存),當遇到乙個識別符號或常量時,查詢識別符號表或常量表,若存在,則返回位置,否則返回0並且填寫符號表或常量表。
識別符號表結構:變數名,型別(整型、實型、字元型),分配的資料區位址
注:詞法分析階段只填寫變數名,其它部分在語法分析、語義分析、**生成等階段逐步填入。
常量表結構:常量名,常量值
2.能對任何s語言源程式進行分析
在執行詞法分析程式時,應該用問答形式輸入要被分析的s源語言程式的檔名,然後對該程式完成詞法分析任務。
3.能檢查並處理某些詞法分析錯誤
詞法分析程式能給出的錯誤資訊包括:總的出錯個數,每個錯誤所在的行號,錯誤的編號及錯誤資訊。
4. 本實驗要求處理以下兩種錯誤(編號分別為1,2):
1:非法字元:單詞表中不存在的字元處理為非法字元,處理方式是刪除該字元,給出錯誤資訊,「某某字元非法」。
2:源程式檔案結束而注釋未結束。注釋格式為:/* …… */
三、實驗程式設計說明
1.實驗方案設計
2.程式源**
#include
#include
#include
#include
using namespace std;
string keywords[20]=;
char aa[99999]=" ";
string id[10000];
int pp=0;
string nu[10000];
int **=0;
void initscanner() //程式初始化:輸入並開啟源程式檔案和目標程式檔案,初始化保留字表
char ch=fgetc(fp);
while(ch!=eof)
fclose(fp);
}int decide1(char a) //判斷是否是字母
int decide2(char a) //判斷是否是數字
int isalpha(int st) //識別保留字和識別符號
int flag=0;
for(int k=0;k<20;k++)
if(flag==0)
if(flagg!=-1) printf(" (id,%d) ",flagg);
else
}else
printf(",-) ");
}return st;
}int isnumber(int st) //識別整數,如有精力,可加入識別實數部分工功能
else if((k==0)&&(aa[st]=='.'))
else if(decide1(aa[st])==1)
else break;
}if(flag==0)
}else
return st;
}int isanotation(int st) //處理除號/和注釋
printf(" (");
for(int i=0;iprintf("%c",tabuf[i]);
printf(",unuseful things!) ");
}else if(aa[st]=='*')
else if(aa[st]=='=')
else printf
return st;
}int isother(int st) //函式識別其他特殊字元
{ switch(aa[st])
{case '=': st++;
if(aa[st]=='=')
st++;
printf(" (rlop,==) ");
else printf(" (rlop,=) ");
break;
case '+': st++;
if(aa[st]=='=')
st++;
printf
else if(aa[st]=='+')
st++;
printf
else printf
break;
case '-': st++;
if(aa[st]=='=')
st++;
printf
else if(aa[st]=='-')
st++;
printf
詞法分析器實驗報告
一 實驗內容 設計 編制並除錯乙個詞法分析程式,加深對詞法分析原理的理解。1.待分析的簡單詞法 1 關鍵字 所有的關鍵字都是小寫 begin if then while do end 2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 num 通過以下正規式定義 id letter lett...
編譯原理詞法分析實驗報告
實驗1 詞法分析實驗報告 一 實驗目的 除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。二 實驗要求 1 待分析的簡單語言的詞法 1 關鍵字 begin if then while do end 所有關鍵字都是小寫。2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 num 通過以下正...
編譯原理詞法分析實驗報告
實驗一詞法分析器設計 實驗目的 1 熟悉詞法分析的基本原理,詞法分析的過程和詞法分析中要注意的問題。2 複習高階語言,進一步加強用高階語言來解決實際問題的能力。3 通過完成詞法分析程式,了解詞法分析的過程。實驗內容 用c語言編寫乙個pl 0詞法分析器,為語法語義分析提供單詞,使之能把輸入的字串形式的...