資源簡介
實驗一:詞法分析
一、實驗?zāi)康?通過設(shè)計一個具體的詞法分析程序,加深對詞法分析原理的理解。并掌握在對程序設(shè)計語言源程序進(jìn)行掃描過程中將其分解為各類單詞的詞法分析方法。
編制一個讀單詞過程,從輸入的源程序中,識別出各個具有獨立意義的單詞,即基本保留字、標(biāo)識符、常數(shù)、運算符、分隔符五大類。并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。
二、實驗預(yù)習(xí)提示
1、 詞法分析器的功能和輸出格式
詞法分析器的功能是輸入源程序,輸出單詞符號。詞法分析器的單詞符號常常表示成以下的二元式(單詞種別碼,單詞符號的屬性值)。本實驗中,采用的是一類符號對應(yīng)一個種別碼的方式。
2、 單詞的BNF表示
---->
---->
----> +
----> -
等等
3、 模塊結(jié)構(gòu)(見課本P95-96)(可根據(jù)自己的理解適當(dāng)修改)
三、實驗過程和指導(dǎo):
(一) 準(zhǔn)備:
1. 閱讀課本有關(guān)章節(jié),明確語言的語法,寫出基本保留字、標(biāo)識符、常數(shù)、運算符、分隔符和程序例。
2. 初步編制好程序。
3. 準(zhǔn)備好多組測試數(shù)據(jù)。
(二) 上機(jī):
(三) 程序要求:
1. 要求用C++Builder或者Dephi或者VC、VB等可視化編程工具編寫;要求有界面(即一般windows下應(yīng)用程序界面)。
2. 輸入為某語言源代碼。
程序輸入/輸出示例:
如源程序為C語言。輸入如下一段:
main()
{
int a,b;
a=10;
b=a+20;
}
要求輸出如下(并以文件形式輸出)。
(2,”main”)
(5,”(“)
(5,”)“)
(5,”{“}
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;”)
(2,”a”)
(4,”=”)
(3,”10”)
(5,”;”)
(2,”b”)
(4,”=”)
(2,”a”)
(4,”+”)
(3,”20”)
(5,”;”)
(5,”}“) 注:為右大括號
要求(可根據(jù)實際情況加以擴(kuò)充和修改):
識別保留字:if、int、for、while、do、return、break、continue等等,單詞種別碼為1。
其他的標(biāo)識符,單詞種別碼為2。
常數(shù)為無符號數(shù),單詞種別碼為3。
運算符包括:+、-、*、/、=、>、=、<=、!= ;單詞種別碼為4。
分隔符包括: “,”“;”“(”“)”“{”“}”等等, 單詞種別碼為5。
(四) 程序思路(僅供參考):
0. 定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。
1. 初始化:從文件將源程序輸入到字符緩沖區(qū)中。
2. 取單詞前:去掉多余空白。調(diào)用過程GETNB();
3. 提取字符組成單詞,利用課本P97圖4.5轉(zhuǎn)換圖構(gòu)造單詞掃描過程SCAN(),需要根據(jù)實際情況加以修改。
4. 判斷單詞的種別碼,調(diào)用過程LOOKUP();
5. 顯示(導(dǎo)出)結(jié)果。

代碼片段和文件信息
//---------------------------------------------------------------------------
#include?
#pragma?hdrstop
//---------------------------------------------------------------------------
USEFORM(“Unit1.cpp“?Form1);
//---------------------------------------------------------------------------
WINAPI?WinMain(HINSTANCE?HINSTANCE?LPSTR?int)
{
????????try
????????{
?????????????????Application->Initialize();
?????????????????Application->CreateForm(__classid(TForm1)?&Form1);
?????????????????Application->Run();
????????}
????????catch?(Exception?&exception)
????????{
?????????????????Application->ShowException(&exception);
????????}
????????catch?(...)
????????{
?????????????????try
?????????????????{
?????????????????????????throw?Exception(““);
?????????????????}
?????????????????catch?(Exception?&exception)
?????????????????{
?????????????????????????Application->ShowException(&exception);
?????????????????}
????????}
????????return?0;
}
//---------------------------------------------------------------------------
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3209??2008-10-30?17:17??詞法分析\Project1.bpr
?????文件???????1069??2008-10-30?17:17??詞法分析\Project1.cpp
?????文件????2162688??2009-11-09?21:25??詞法分析\Project1.tds
?????文件??????17802??2009-11-09?20:55??詞法分析\Project1.obj
?????文件????????876??2008-10-30?17:16??詞法分析\Project1.res
?????文件???????2734??2009-11-09?21:15??詞法分析\Unit1.~dfm
?????文件?????????51??2009-11-09?21:24??詞法分析\Unit1.~ddp
?????文件???????6936??2009-11-09?21:24??詞法分析\Unit1.cpp
?????文件???????1271??2009-11-09?21:15??詞法分析\Unit1.h
?????文件???????2734??2009-11-09?21:15??詞法分析\Unit1.dfm
?????文件?????????51??2009-11-09?21:24??詞法分析\Unit1.ddp
?????文件???????8943??2009-11-09?20:55??詞法分析\分析程序.cpp
?????文件???????6936??2009-11-09?21:24??詞法分析\Unit1.~cpp
?????文件??????52736??2009-11-09?21:24??詞法分析\Project1.exe
?????文件???????1271??2009-11-09?21:15??詞法分析\Unit1.~h
?????文件?????????76??2009-11-09?21:29??詞法分析\說明文件.txt
?????文件?????238080??2009-11-09?21:24??詞法分析\Unit1.obj
?????目錄??????????0??2009-11-09?19:53??詞法分析
-----------?---------??----------?-----??----
??????????????2507463????????????????????18
評論
共有 條評論