C語言實現詞法分析器

2022-09-29 05:48:13 字數 2671 閱讀 9960

問題描述:

用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語言小子集的源程式,根據給定的詞法規則,識別單詞,填寫相應的表。如果產生詞法錯誤,則顯示錯誤資訊 位置,並試圖從錯誤中恢復。簡單的恢復方法是忽略該字元 或單詞 重新開始掃瞄。相關詞法規則 識別符號 字母 識別符號 識別符號 字母 識別符號 識別符號 數...