本次的內容主要是通過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...