版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-語法制導(dǎo)翻譯

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

《語法制導(dǎo)翻譯》簡稱SDT(Syntax-directed translation)?;趯傩晕姆ǖ奶幚磉^程,對單詞符號串進(jìn)行語法分析,構(gòu)造語法分析樹,然后根據(jù)需要構(gòu)造屬性依賴圖,遍歷語法樹并在語法樹的各結(jié)點處按語義規(guī)則進(jìn)行計算。

簡介翻譯的任務(wù):首先是語義分析和正確性檢查,若正確,則翻譯成中間代碼或目標(biāo)代碼。

使用的方法稱作語法制導(dǎo)翻譯?;舅枷胧?,根據(jù)翻譯的需要設(shè)置文法符號的屬性,以描述語法結(jié)構(gòu)的語義。例如,一個變量的屬性有類型,層次,存儲地址等。表達(dá)式的屬性有類型,值等。屬性值的計算和產(chǎn)生式相聯(lián)系。隨著語法分析的進(jìn)行,執(zhí)行屬性值的計算,完成語義分析和翻譯的任務(wù)。

屬性值根據(jù)計算的依賴關(guān)系分成不相交的兩類:綜合屬性(synthesized attribute)和繼承屬性(inherited attribute)。在分析樹中,一個結(jié)點的綜合屬性值是從其子結(jié)點的屬性值計算出來的;而一個結(jié)點的繼承屬性值是由該結(jié)點兄弟結(jié)點和父結(jié)點的屬性值計算出來的。。

隨語法分析的進(jìn)展,識別出一個語法結(jié)構(gòu),就對它的語義進(jìn)行分析和翻譯。

語法制導(dǎo)翻譯是指一種源語言代碼的翻譯完全由語法分析器驅(qū)動的編譯器的實現(xiàn)方法。

一個常見的語法制導(dǎo)翻譯方法是將輸入字符串通過把相應(yīng)的動作附加到每一條語法規(guī)則上的方法翻譯為一連串的動作。因此,對于一個基于某語法的字符串的解析會產(chǎn)生一個對于規(guī)則的應(yīng)用序列。語法制導(dǎo)分析提供了一種將語義附加到任何一種語法上的簡單方法。1

概述語法制導(dǎo)翻譯的根本上是在一個上下文無關(guān)文法中通過向結(jié)果中添加動作(action)來工作的,從而形成語法制導(dǎo)定義(Syntax-Directed Definition)。動作是指,一個結(jié)果在推導(dǎo)過程中被使用的時候,將要被執(zhí)行的步驟或過程。 一個嵌入了將要執(zhí)行的動作的語法規(guī)則,稱為一個語法制導(dǎo)翻譯計劃(有時簡稱為“翻譯計劃”)。

語法中的每個符號可以有一個屬性,即一個將被關(guān)聯(lián)到符號的值。常見的屬性可能包含變量類型、表達(dá)式的值,等等。 給出一個符號X和一個屬性t,符號的屬性可以通過X.t來引用。

因此,給出動作和屬性,語法規(guī)則可以通過每個符號的屬性來應(yīng)用動作和傳遞信息,從而將語法規(guī)則用于翻譯某語言上的字符串。2

元編譯器早期元編譯器在其描述中使用了語法驅(qū)動翻譯和語法制導(dǎo)翻譯這兩個術(shù)語。在其輸出代碼中具有元編程的語言特性。

參見元編譯器、META II以及TREE-META。1

本詞條內(nèi)容貢獻(xiàn)者為:

黎明 - 副教授 - 西南大學(xué)