編譯原理,例 詞法分析器

2022-08-11 13:33:19 字數 2509 閱讀 1957

編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。

詞法分析:電腦科學中將字串行轉換為單詞(token)序列的過程。進行詞法分析的程式或者函式叫作詞法分析器(lexical analyzer),也叫掃瞄器(scanner)。詞法分析器一般以函式的形式存在,供語法分析器呼叫。 完成詞法分析任務的程式稱為詞法分析程式或詞法分析器或掃瞄器。完成詞法分析任務的程式稱為詞法分析程式或詞法分析器或掃瞄器。從左至右地對源程式進行掃瞄,按照語言的詞法規則識別各類單詞,並產生相應單詞的屬性字。

詞法分析是編譯器對源**進行編譯處理的第一步。編寫指定程式語言的詞法分析器需要構造相應的有限自動機,然後根據其編寫。

目標:對下面的一段程式進行語法分析,輸出分詞。

var

n, f;

begin

n := 0

; f := 1

;

while n # 10

dobegin

n := n + 1

; f := f *n;

end;

call print;

end.

有限自動機在紙上手畫的,這個語言的詞法比較簡單,算符界符表,保留字表比較少,我直接寫到**裡了(*^▽^*)

#include#include 

#include

using

namespace

std;

bool isdigit(char

ch);

bool isletter(char

ch);

int reserve(string

s);int

main()

if(isletter(ch))//

進入字母狀態

code = reserve(strtoken);//

查詢保留字

if(code==0) //

不是保留字

else

continue

; }

else

if(isdigit(ch))//

進入數字狀態

cout

<

<

", 常量 >

"<

continue

; }

else

if(ch == '

+') cout<

< + , 算符 >

"<

else

if(ch == '

-') cout<

< - , 算符 >

"<

else

if(ch == '

*') cout<

< * , 算符 >

"<

else

if(ch == '

/') cout<

< / , 算符 >

"<

else

if(ch == '

<

') cout<

< < , 算符 >

"<

else

if(ch == '

>

') cout<

< > , 算符 >

"<

else

if(ch == ':'

)

else

if(ch == 0x23) cout<

"<

else

if(ch == 0x28) cout<

< ( , 界符 >

"<

else

if(ch == 0x29) cout<

< ) , 界符 >

"<

else

if(ch == 0x2c) cout<

< , , 界符 >

"<

else

if(ch == 0x2e) cout<

< . , 界符 >

"<

else

if(ch == 0x3b) cout<

< ; , 界符 >

"<

else

if(ch=='

'||ch=='

\r'||ch=='

\n') continue

;

else cout<

error :

"infile>>ch;

if(infile.eof()) break

; }

infile.close();

//關閉檔案輸入流

return0;

}bool isdigit(char

ch)bool isletter(char

ch)int reserve(string

s)

最後的輸出:

編譯原理 詞法分析器

1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...

編譯原理(一)詞法分析器

詞法分析器的功能是輸入源程式,輸出單詞符號。單詞符號是乙個程式語言的基本語法符號。程式語言的符號一般可以定義為以下幾種 關鍵字 是由程式語言定義的具有固定意義的識別符號,也稱這些識別符號為保留字或基本字。例如 c 語言中的define do for while if else等 識別符號用來表示各種...

編譯原理之詞法分析器(C C)

從乙個檔案中讀取原始碼,執行後可以直接看到結果,也可在指定檔案中檢視結果。這個詞法分析器只實現了部分關鍵字 字元等的識別,可在key陣列自行新增,種別碼的判別與新增用case更加方便,可寫下試試。include include include include include using namesp...