實驗專案名稱: 詞法分析實驗學時: 6
同組學生姓名: 無實驗地點: ***x
實驗日期: ************xx實驗成績
批改教師批改時間
一、實驗目的和要求
通過編寫並上機除錯乙個詞法分析程式,掌握在對程式語言的源程式進行掃瞄的過程中,將其分解後各類單詞的詞法分析方法。
二、實驗儀器和裝置
主機一台:有visual studio 2005工具
三、實驗過程
輸入:從具有代表性的高階程式語言中,選取乙個適當大小的子集,例如可以選取一類典型單詞,也可以盡可能使各種型別的單詞都能兼顧到。
輸出:單詞串的輸出形式,所輸出的每一單詞均按形如(字元型別單詞及其它字元 《行,列》)的三元式編碼。字元型別包括關鍵字、識別符號、浮點數、指數形式、常數、引入檔案、分隔符。
《行,列》標識單詞及各個字元在文字框中出現的位置。
詞法規則
關鍵字: 本程式識別的關鍵字為int real if then else while ,僅當單獨出現
以上識別符號時識別為關鍵字,對於inta,ifb等識別為識別符號。
識別符號: 乙個識別符號必須以字母開頭,後面接上字母和數字,否則產生報錯資訊,程
序停止詞法分析,輸出相關錯誤資訊
如: 正確:abc, abc123, 等
錯誤:123abc
操作符: 本程式識別的操作符為< <= > ><<= << >>= >> % %=
當 !後跟其它字元時產生出錯資訊。
分隔符: 本程式識別的分隔符為
數字: 識別的數字遵循以下文法規則:
digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
intnumber digit+
exponent (e|edigit+
fraction . digit+
realnumber digit+ exponent | digit+ fraction ( exponent | )
例如:正確: 123, 123e2, 123.3123.3e4
錯誤: 123a,123e, 123.a . 123.3a, 123.3e
注釋符: 本程式對三者的注釋符均識別.
引入檔案為 #include<**>形式,其他做出錯處理
設計思路
本程式採用字元流形式讀入檔案,識別其中的關鍵字,識別符號,分隔符,注釋符,引入檔案宣告等.
設計了乙個靈活的讀取字元的自動機為如下圖1-1所示:
圖1-1設計思路
詞法分析部分的lexical類如下:
using system;
using system.io;
using
namespace lexical_analyzer
public arraylist getsymboltable()
private void analyzer()
{bool isrunning = true;
while (isrunning)
switch (state)
case 0:
if (c空格
else if (c == '\ttab
rpos += 3;
else if ((int)c == 13) //空格
else if ((int)c == 10) //回車
rpos = 0;
rnum++;
else if (c結束符
return;
else if (c == '"')
install("分隔符", c.tostring(), rpos, rnum);
else if (c.tostring
install("分隔符", c.tostring(), rpos, rnum);
else if (c操作符+
state = 15;
install("操作符","+",rpos,rnum);
else if (c操作符-
state = 14;
install("操作符","-",rpos,rnum);
詞法分析實驗報告
實驗報告 課程名稱編譯原理 實驗名稱詞法分析實驗 班級學號姓名指導教師 實驗日期 一 實驗目的 1.了解詞法分析的主要任務。2.熟悉編譯程式的編制 通過設計 除錯詞法分析程式,實現從源程式中分出各種單詞的方法 熟悉詞法分析程式所用的工具自動機,進一步理解自動機理論 掌握文法轉換成自動機的技術及有窮自...
詞法分析小結
詞法分析是編譯器工作的第一階段,它的工作就是從輸入 源 中取得token,以作為parser 語法分析 的輸入,一般在詞法分析階段都會把一些無用的空白字元 white space,即空格 tab和換行 以及注釋剔除,以降低下一步分析的複雜度,詞法分析器一般會提供乙個gettoken 這樣的方法,pa...
詞法分析小結
詞法分析小結 簡介 詞法分析是編譯器工作的第一階段,它的工作就是從輸入 源 中取得token,以作為parser 語 詞法分析小結 正文開始 詞法分析是編譯器工作的第一階段,它的工作就是從輸入 源 中取得token,以作為parser 語法分析 的輸入,一般在詞法分析階段都會把一些無用的空白字元 w...