編譯原理之設計簡單詞法分析器(C語言)

2021-10-05 12:34:25 字數 2636 閱讀 6997

本次的內容主要是通過c語言實現簡單的詞法分析器,所以理論方面的知識較少,在大家有了編譯原理的基礎知識後,提供**學習。

使用語言:c語言

編譯環境:vscode

編譯原理總框:

詞法分析(lexical analysis)是電腦科學中將字串行轉換為單詞(token)序列的過程。進行詞法分析的程式或者函式叫作詞法分析器(lexical analyzer,簡稱lexer),也叫掃瞄器(scanner)。詞法分析器一般以函式的形式存在,供語法分析器呼叫。

通俗理解:我們可以聯想到英語句子,假如給我們一串英語句子,這個時候我們要提取每乙個單詞,就是詞法分析器的作用。語法分析器就呼叫詞法分析器,來實現對每個單詞的解釋翻譯。

簡述:主要是數字,字串(識別符號和關鍵字),運算子,邊界符等。數字以數字開頭,一一識別,將字元通過asc碼轉數字提取;關鍵字由於有限通過列舉的方式儲存,通過判斷字母串滿匹配確定,而字串不是關鍵字,則為識別符號;其他特殊符號則是直接編碼提取,根據有限的特性。

#include

#include

char input[

200]

;//存放輸入字串

char token[5]

;//存放構成單詞符號的字串

char ch;

//存放當前讀入字元

int p;

//input下標

int fg;

//switch標記

int num;

//存放整型值

// 二維字元陣列,存放關鍵字

char index[6]

[6]=

;// 詞法分析方法申明

void

scaner()

;int

main()

while

( ch!=

'#')

; p=0;

do}while

( fg !=0)

;return0;

}/*詞法分析*/

void

scaner()

p--; token[m++]=

'\0'

; fg =7;

for( n=

0; n<

6; n++)}

}//數字處理流程

elseif(

( ch<=

'9'&& ch>=

'0')

) p--

; fg =8;

}//運算子界符處理流程

else

switch

(ch)

else

if(ch==

'=')

//產生<=

else

token[m++]=

'\0'

;break;}

case

'>'

:else

//產生》

編譯原理 詞法分析器

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

c 模擬簡單詞法分析器

編譯原理的基礎之一就是詞法分析,這裡便使用c 簡單模擬了乙個詞法分析器。這個詞法分析器的狀態轉換圖如下 而我的執行截圖如下 如下 include using namespace std define max len 200 將乙個字串內容清空 void cleararray char c 判斷是否為...

C語言簡單詞法分析器

詞法分析器 c語言 輸入源程式 輸出單詞符號 1 預處理程式 2 掃瞄器 單詞識別程式 include include include define keyword num 32 int pos pos搜尋指標 char ch ch最新讀入的字元 char buf 1000000 buf緩衝區 ch...