編譯器的結(jié)構(gòu)(The Structure of a Compiler)
源程序的分析階段分為:線性分析希俩,層次分析摔竿,語(yǔ)義分析疲眷。
1服爷、詞法分析(Lexical Analysis)
2锈候、語(yǔ)法分析(Syntax Analysis)
把源程序的記號(hào)分組薄料,產(chǎn)生被編譯器用于生成代碼的語(yǔ)法短語(yǔ)。
詞法結(jié)構(gòu)不要求遞歸泵琳,語(yǔ)法結(jié)構(gòu)需要遞歸摄职。
3、語(yǔ)義分析(Semantic Analysis)
語(yǔ)義分析階段檢查源程序的語(yǔ)義錯(cuò)誤获列,并收集代碼產(chǎn)生階段時(shí)用到的類型信息谷市。語(yǔ)義分析通過語(yǔ)法分析的層次結(jié)構(gòu)來(lái)區(qū)分表達(dá)式和語(yǔ)句中的操作符和操作數(shù)。
4击孩、中間碼的產(chǎn)生(Intermediate Code Generation)
源程序的中間代碼:易于產(chǎn)生迫悠;易于翻譯成目標(biāo)程序。
5巩梢、代碼生成(Code Generation)
編譯器為源程序定義盒使用的變量選擇存儲(chǔ)單元创泄,并把中間指令翻譯完成相同任務(wù)的機(jī)器代碼指令序列。
6括蝠、符號(hào)表的管理(Symbol-Table Management)
符號(hào)表時(shí)一個(gè)數(shù)據(jù)結(jié)構(gòu)鞠抑。每個(gè)標(biāo)識(shí)符在符號(hào)表中都有一條記錄,記錄每個(gè)域?qū)?duì)應(yīng)于該標(biāo)識(shí)符的一個(gè)屬性忌警。這種數(shù)據(jù)結(jié)構(gòu)允許我們快速地找到每個(gè)標(biāo)識(shí)符的記錄搁拙,并在該記錄中快速地存儲(chǔ)盒檢索信息。