編譯原理詞法分析實驗報告
A. 詞法分析和語法分析區別
詞法分析和語法分析是編譯原理中的兩個重要概念,它們在編譯過程中扮演不同的角色。
1. 詞法分析(Lexical Analysis):詞法分析是編譯器的第一階段,也稱為掃描(Scanning)或詞法掃描(Tokenization)。它的主要任務是將源代碼轉化為一個個的詞法單元(Token)。詞法單元是具有獨立含義的字元序列,比如關鍵字、標識符、數字常量、運算符等。詞法分析器根據事先定義好的詞法規則(正則表達式或有限狀態自動機)對源代碼進行掃描和識別,生成詞法單元流作為後續語法分析的輸入。
2. 語法分析(Syntax Analysis):語法分析是編譯器的第二階段,也稱為解析(Parsing)。它的主要任務是根據語法規則分析詞法單元流,確定語法結構,並構建對應的語法樹(Parse Tree)或抽象語法樹(Abstract Syntax Tree)。語法規則通常使用上下文無關文法的巴科斯-諾爾範式(BNF)。語法分析器通過遞歸下降、LR分析等演算法,從詞法單元流中識別語法結構,並進行相應的語法規約和移進操作,最終得到語法樹或者抽象語法樹。
總結而言,詞法分析關注於單詞的識別和分類,將源代碼切分為有意義的詞法單元;而語法分析則關注於將詞法單元通過語法規則組織起來,構建出語法結構。兩者相互配合,是編譯過程中的重要組成部分,並且是後續語義分析和代碼生成的基礎。
B. 編譯原理詞法分析實驗中, 文件寫入順序的問題(fputs)
1)fopen在代碼中出現2次,沒有必要
2)你的程序不對 你搞混和S這個字元和TOKEN。
你的第一個WHILE讀入的是字元S,而TOKEN是由若干字元S構成的。而你的SWITCH(S)裡面按理應該是組成TOKEN的規則,而你直接就輸出了。這樣如果你要結果,我給你改了下,你看下:
int main()
{
char token[20] = {'