C語言詞法分析器 C 語言實現

2021-10-09 15:23:27 字數 3103 閱讀 7720

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

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)

;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()

;void

separateandjudge()

}}}void

showtokendata()

string singlelinecommentsfilter()

}}return codesource;

}string multilinecommmentsfileter()

}while

(codesource[cnt +2]

!='*'

and codesource[cnt +3]

!='/');

codesource.

erase

(cnt,4)

;}}return codesource;

}string specialcharacterfilter()

}return codesource;

}int

judgestartingcharactortype

(char ch)

else

else

else

else

else}}

}}return type;

}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;

}string transchartostring

(char ch)

bool

isreservedword

(string vocabulary)

;bool flag =

false

;for

(int i =

0; i <

32; i++)}

return flag;};

bool

isboundsymbol

(char ch)"}

;for

(int i =

0; i <

6; 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;

}

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...

C語言實現詞法分析器

問題描述 用c或c 語言編寫乙個簡單的詞法分析程式,掃瞄c語言小子集的源程式,根據給定的詞法規則,識別單詞,填寫相應的表。如果產生詞法錯誤,則顯示錯誤資訊 位置,並試圖從錯誤中恢復。簡單的恢復方法是忽略該字元 或單詞 重新開始掃瞄。相關詞法規則 識別符號 字母 識別符號 識別符號 字母 識別符號 識...