版權(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é)點(diǎn)處按語義規(guī)則進(jìn)行計(jì)算。

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

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

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

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

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

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

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

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

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

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

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

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

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