簡介
翻譯的任務:首先是語義分析和正確性檢查,若正確,則翻譯成中間代碼或目標代碼。
使用的方法稱作語法制導翻譯。基本思想是,根據翻譯的需要設定文法符號的屬性,以描述語法結構的語義。例如,一個變數的屬性有類型,層次,存儲地址等。表達式的屬性有類型,值等。屬性值的計算和產生式相聯繫。隨著語法分析的進行,執行屬性值的計算,完成語義分析和翻譯的任務。
屬性值根據計算的依賴關係分成不相交的兩類:綜合屬性(synthesized attribute)和繼承屬性(inherited attribute)。在分析樹中,一個結點的綜合屬性值是從其子結點的屬性值計算出來的;而一個結點的繼承屬性值是由該結點兄弟結點和父結點的屬性值計算出來的。。
隨語法分析的進展,識別出一個語法結構,就對它的語義進行分析和翻譯。
語法制導翻譯是指一種源語言代碼的翻譯完全由語法分析器驅動的編譯器的實現方法。
一個常見的語法制導翻譯方法是將輸入字元串通過把相應的動作附加到每一條語法規則上的方法翻譯為一連串的動作。因此,對於一個基於某語法的字元串的解析會產生一個對於規則的套用序列。語法制導分析提供了一種將語義附加到任何一種語法上的簡單方法。
概述
語法制導翻譯的根本上是在一個上下文無關文法中通過向結果中添加動作(action)來工作的,從而形成語法制導定義(Syntax-Directed Definition)。動作是指,一個結果在推導過程中被使用的時候,將要被執行的步驟或過程。 一個嵌入了將要執行的動作的語法規則,稱為一個語法制導翻譯計畫(有時簡稱為“翻譯計畫”)。
語法中的每個符號可以有一個 屬性,即一個將被關聯到符號的值。常見的屬性可能包含變數類型、表達式的值,等等。 給出一個符號 X和一個屬性 t,符號的屬性可以通過 X.t來引用。
因此,給出動作和屬性,語法規則可以通過每個符號的屬性來套用動作和傳遞信息,從而將語法規則用於翻譯某語言上的字元串。
元編譯器
早期元編譯器在其描述中使用了語法驅動翻譯和語法制導翻譯這兩個術語。在其輸出代碼中具有元編程的語言特性。
參見元編譯器、META II以及TREE-META。