問題描述:
用c或c++語言編寫乙個簡單的詞法分析程式,掃瞄c語言小子集的源程式,根據給定的詞法規則,識別單詞,填寫相應的表。如果產生詞法錯誤,則顯示錯誤資訊、位置,並試圖從錯誤中恢復。簡單的恢復方法是忽略該字元(或單詞)重新開始掃瞄。
相關詞法規則
識別符號》::=字母》
識別符號》::=識別符號》字母》
識別符號》::=識別符號》數字》
常量》::=無符號整數》
無符號整數》::=數字序列》
數字序列》::=數字序列》數字》
數字序列》::=數字》
字母》::=a|b|c|……|x|y|z
數字》::=0|1|2|3|4|5|6|7|8|9
加法運算子》::=+|-
乘法運算子》::=*|/
關係運算子》::=|!=|>=|<=|==
分界符》::=,|;|(|)|
保留字》::=main|int|if|else|while|do
編寫詞法分析程式的步驟:
(1)確定所要翻譯的語言(或其子集)。
c語言(2)設計屬性字,及各類**,如識別符號表、常量表、符號及其機內表示對照表等。
與詞法分析有關的**:
1. 字元表
保留字:main,int,if,elswww.cppcns.come,while,do
字母(全小寫):a|b|c|……|x|y|z
數字:0,1,2,3,4,5,6,7,8,9
運算子和界符:,!=,>=,<=,==,,,;,(,),
2. 特定單詞機內表示表
3.畫出總控流程圖及各個子程式的流程圖。
4. 程式
輸入:乙個存放c語言程式的s.txt檔案
輸出:存放以(單詞,種別碼)形式輸出的result.txt檔案
需要6個陣列:
1. 儲存關鍵字 key[6]
2. 儲存對應下標關鍵字的種別碼 keynum[6]
3. 儲存運算子和界符 symbol[17]
4. 儲存運算子對程式設計客棧應下標的種別碼 symbolnum[17]
5. 儲存從檔案中取出的每個字元(不包括括號)letter[1000]
主要函式:
takeword();
功能:將檔案letter中每個字元進行提取,www.cppcns.com找出關鍵字,輸出種別碼
num作為全域性變數儲存提取到字元的哪個下標
1. 先提取乙個字元,如果是字母,進入case1,呼叫identifier(),不斷的提取字母或數字進行連線,沒連線乙個字元用int iskeyword()程式(返回關鍵字種別碼)判斷是否為關鍵字,是就退出函式返回string,不是就繼續執行函式,直到連線的字元不再是字母或數字,即此時字串為識別符號
2. 如果是數字,進入case 2,呼叫number()函式,不斷進行字串連線,知道下乙個連線字元不再是數字
3. 如果是符號,進入case 3,呼叫symbolstr()函式,如果是=,>,
其他輔助函式:
int issymbol()判斷運算子和界符,並返回種別碼
bool isnum() 判斷是否為數字
bool isletter()判斷是否為字母
int iskeyword()判斷是否為關鍵字,是返回種別碼
int typeword()返回單個字元的型別
string identifier()識別符號的連線
string symbolstr()符號和界符的連線
string number()數字的連線
void print()輸出
程式:#include
#include
#include
#include
using namespace std;
//關鍵字
string key[6]=;
//關鍵字的種別碼
int keynum[6]=;
//運算子和界符
string symbol[17]=","+","-","*","/","="};
//char symbol[12]='};
//運算子和界符的種別碼
int symbolnum[17]=;
//存放檔案取出的字元
string letter[1000];
//將字元轉換為單詞
string words[1000];
int length; //儲存程式中字元的數目
int num;
int issymbol(string s)
return 0;
} //判斷是否為數字
bool isnum(string s)
//判斷是否為字母
bool isletter(string s)
//判斷是否為關鍵字,是返回種別碼
int iskeyword(string s)
return 0;
}//返回單個字元的型別
int typeword(string str) //去掉程式中的空格
} takeword();
// for(j=0;jytpbxjuquetter[j]<
執行結果:
s.txt
result.txt
本文標題: c語言實現詞法分析器
本文位址:
C語言詞法分析器 C 語言實現
這是老師布置的編譯原理的實驗課任務,課餘時間花了近乙個星期的時間去編寫 主要是c 太久沒有用了,好多函式都不熟悉,查閱了很多資料 這次的詞法分析也沒有語法錯誤判斷功能,如果想要增加功能可以在相關函式 段增加即可.對於此法單元的種別碼也只是簡單區分,不過自己加上去就可以了 c語言詞法分析流程如圖所示 ...
詞法分析器 C語言
include include include include include int i,row 0,line 0 char test 1000 test檔案中的字元 int number 100 常數表 char mark 100 5 識別符號表 詞法分析 int wordanalysis in...
詞法分析器(分析C語言)
用c或c 語言編寫乙個簡單的詞法分析程式,掃瞄c語言小子集的源程式,根據給定的詞法規則,識別單詞,填寫相應的表。如果產生詞法錯誤,則顯示錯誤資訊 位置,並試圖從錯誤中恢復。簡單的恢復方法是忽略該字元 或單詞 重新開始掃瞄。相關詞法規則 識別符號 字母 識別符號 識別符號 字母 識別符號 識別符號 數...