閱讀本文只需要5分鐘
引用聲明:本文內(nèi)容是在網(wǎng)易云課堂的編譯原理課的基礎(chǔ)上,進(jìn)行提煉
編譯原理主要是講了編譯器的實(shí)現(xiàn)砸彬。
那什么是編譯器呢颠毙?
編譯器就是將 源程序→編譯器 →目標(biāo)機(jī)器代碼的程序
本文將用一段最簡(jiǎn)單的代碼進(jìn)行說明
1 + 2 + 3
第一步. 詞法分析
當(dāng)代碼從文件中被讀入到編輯器時(shí),將會(huì)進(jìn)行詞法分析
示例中的代碼最終會(huì)轉(zhuǎn)換為(下面為偽代碼)
1 ADD 2 ADD 3
第二步. 語法分析
這一步編譯器將會(huì)把詞法分析的結(jié)果轉(zhuǎn)換成AST(abstract syntax tree, 抽象語法樹)
所有的操作數(shù)將會(huì)作為子節(jié)點(diǎn)砂碉,所有的操作符將會(huì)作為父節(jié)點(diǎn)蛀蜜。(不知道的同學(xué)可以看一下樹的生成)
3. 生成目標(biāo)代碼
對(duì)上面的樹進(jìn)行后序遍歷,將會(huì)得到下面的偽代碼
((1 2 +) 3 +)
生成的匯編偽代碼為
START:
MOV VALUE, 0//初始化結(jié)果為0
ADD VALUE, 1
ADD VALUE, 2//(1 2 +)的匯編偽代碼
ADD VALUE, 3
RET VALUE
END
最終匯編代碼會(huì)被編譯成機(jī)器代碼增蹭,在計(jì)算機(jī)上執(zhí)行滴某。
下面為一般情況下的編譯流程
1. 詞法分析(生成代碼對(duì)應(yīng)的token序列,使用正則表達(dá)式)
2. 語法分析(生成AST)
3. 語義分析(對(duì)代碼的語法進(jìn)行檢查)
4. 代碼生成(生成可執(zhí)行的代碼)