人人都能讀懂的編譯器原理
日期?:?2020年12月01日?? ? ??
正文共?:4544字0圖
作者注:
?簡單介紹?
編譯器是什么?
編譯器是做什么的?
從你給定的源代碼中讀取單個詞。
把這些詞按照單詞、數(shù)字、符號、運算符進行分類。
通過模式匹配從分好類的單詞中找出運算符,明確這些運算符想進行的運算,然后產(chǎn)生一個運算符的樹(表達式樹)。
最后一步遍歷表達式樹中的所有運算符,產(chǎn)生相應的二進制數(shù)據(jù)。

解釋器是什么?

1. 詞法分析
2+2?– 其實這個表達式只有三種?標記:一個數(shù)字:2,一個加號,另外一個數(shù)字:2。12+3?這樣的字符串:它會讀入字符?1,2,+,和?3。我們已經(jīng)把這些字符拆分開了,但是現(xiàn)在我們必須把他們組合起來;這是分詞器的主要任務之一。舉個例子,我們得到了兩個單獨的字符?1?和?2,但是我們需要把它們放到一起,然后把它們解析成為一個整數(shù)。至于?+也需要被識別為加號,而不是它的字符值 – 字符值是43 。2. 解析
int a = 3?和?a: int = 3?的區(qū)別在于解析器的處理上面。解析器決定了語法的外在形式是怎樣的。它確保括號和花括號的左右括號是數(shù)量平衡的,每個語句結(jié)尾都有一個分號,每個函數(shù)都有一個名稱。當標記不符合預期的模式時,解析器就會知道標記的順序不正確。12+3?:expr?解析器,因為它直接與所有內(nèi)容都相關(guān)的頂層。唯一有效的輸入必須是任意數(shù)字,加號或減號,任意數(shù)字。expr?需要一個?additive_expr,這主要出現(xiàn)在加法和減法表達式中。additive_expr?首先需要一個?term?(一個數(shù)字),然后是加號或者減號,最后是另一個?term?。
// BEGIN PARSER //?和?// END PARSER //?的注釋標記出了新的解析器代碼的開頭和結(jié)尾。
針對 C 語言語法編寫的解析器(又叫做詞法分析器)和解析器樣例。從字符序列的開始 “if(net>0.0)total+=net(1.0+tax/100.0);”,掃描器組成了一系列標記,并且對它們進行分類,例如,標識符,保留字,數(shù)字,或者運算符。后者的序列由解析器轉(zhuǎn)換成語法樹,然后由其他的編譯器分階段進行處理。掃描器和解析器分別處理 C 語法中的規(guī)則和與上下文無關(guān)的部分。引自:Jochen Burghardt.來源.
3. 生成代碼
-O?).s?或?.asm)。然后該文件會被傳遞給匯編器,匯編器是匯編語言的編譯器,它會生成相應的二進制代碼。之后這些二進制代碼會被寫入到一個新的目標文件中 (.o) 。
?總結(jié)?
—?THE END —

評論
圖片
表情
