C語言詞法分析器 編譯原理

2021-10-09 16:09:09 字數 3326 閱讀 4951

這是老師布置的編譯原理的實驗課任務,課餘時間花了近乙個星期的時間去編寫**(主要是c++太久沒有用了,好多函式都不熟悉,查閱了很多資料),這次的詞法分析只有簡單的語法錯誤判斷功能,約等於沒有.如果想要增加功能可以在相關函式**段增加即可.

而且token的種別碼只做了粗略的區分,想要加上也很簡單

c語言詞法分析流程如圖所示:

這次的**基本沒有寫注釋,但是我相信大家結合流程圖也能看懂,如果覺得太長可以將**複製到visual studio中將函式**塊閉合起來這樣看起來就邏輯清楚了

#include

#include

#include

#include

#include

using

namespace std;

string readfile

(string filename)

;string filefilter()

;string singlelinecommentsfilter()

;string multilinecommmentsfileter()

;string specialcharacterfilter()

;void

separateandjudge()

;bool

isreservedword

(string vocabulary)

;void

separateandjudge()

;void

showtokendata()

;int

digitstarted

(int cnt)

;bool

isboundsymbol

(char ch)

;bool

isoperator

(char ch)

;int

judgestartingcharactortype

(char ch)

;bool

isdigit

(char ch)

;bool

isalpha

(char ch)

;int

alphastarted

(int cnt)

;int

underlinestarted

(int cnt)

;string transchartostring

(char ch)

;int

operatorstarted

(int cnt)

;string codesource;

mapint> tokens;

//identifier is 1,reservedword 2,digit 3,bordersymbol 4,operator 5

intmain()

string readfile

(string filename)

else

return codesource;}}

;string filefilter()

;string singlelinecommentsfilter()

}}return codesource;

}string multilinecommmentsfileter()

;}while

((codesource[cnt +1]

!='*'

and codesource[cnt +2]

!='/'))

; codesource.

erase

(cnt,4)

;}}return codesource;

}string specialcharacterfilter()

}return codesource;

}void

separateandjudge()

}}}int

judgestartingcharactortype

(char ch)

else

else

else

else

else}}

}}return type;

}bool

isboundsymbol

(char ch)",

"\"",}

;for

(int i =

0; i <

7; i++)}

return flag;

}bool

isoperator

(char ch)

;for

(int i =

0; i <

9; i++)}

return flag;

}bool

isdigit

(char ch)

return flag;

}bool

isalpha

(char ch)

;return flag;

}int

digitstarted

(int cnt)

tokens[digit]=3

;return cnt;

}int

alphastarted

(int cnt)if(

isreservedword

(alpha)

)else

return cnt;

}int

underlinestarted

(int cnt)

tokens[word]=1

;return cnt;

}int

operatorstarted

(int cnt)

else

tokens[operators]=5

;return cnt;

}string transchartostring

(char ch)

bool

isreservedword

(string vocabulary)

;bool flag =

false

;for

(int i =

0; i <

32; i++)}

return flag;};

void

showtokendata()

編譯原理 C語言詞法分析器

本程式預設的種別碼的編碼 主介面 功能1提到的input.txt檔案的內容可以是任意c語言 這裡我的input.txt隨便打了一段c語言 進入1功能,直接從input.txt檔案讀取 這裡沒寫路徑輸入,必須把input.txt和本程式的cpp檔案放在同一目錄下 經過分析後得到結果 沒做清屏處理,寫得...

c語言詞法分析器

include include include void main void int reserver char void main void if output fopen output.txt wt null fprintf output,4s t 8s t 16s t 4s n 位置 符號型別...

C語言詞法分析器

include include include include define len 180 int syn,p,m,n char token 10 ch char keyword 32 struct wordline 定義結構體 struct wordline creat struct wordl...