1. 程式人生 > >編譯原理 第六章 屬性文法和語法制導翻譯

編譯原理 第六章 屬性文法和語法制導翻譯

一、知識總結

        首先學習了屬性文法,屬性文法是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”,稱為“屬性”。屬性分為綜合屬性和繼承屬性。綜合屬性用於“自下而上”傳遞資訊,在語法樹中,一個結點的綜合屬性的值,由其子結點的屬性值確定。繼承屬性用於“自上而下”傳遞資訊。在語法樹中,一個結點的繼承屬性由此結點的父結點和/或兄弟結點的某些屬性確定。語義規則是屬性計算的過程即是語義處理的過程對於文法的每一個產生式配備一組屬性的計算規則。

        之後學習了基於屬性文法的處理方法。基於屬性文法的處理過程是輸入串——》語法樹——》依賴圖——》語義規則計算次序——》計算結果。在一顆語法樹中的結點的繼承屬性和綜合屬性之間的相互依賴關係可以用稱作依賴圖的一個有向圖來描述。假設語法樹已經建立起了,並且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性。然後以某種次序遍歷語法樹,直至計算出所有的屬性。最常用的遍歷方法是深度優先,從左到右的遍歷方法,如果需要,可使用多次遍歷。與樹遍歷的屬性計算方法不同,一遍掃描的處理方法是在語法分析的同時計算屬性值,而不是語法分析構造語法樹之後進行屬性的計算,而且無需構造實際的語法樹。從語法樹中去掉對翻譯不必要的資訊,而獲得更有效的源程式中間表示。這種經變換後的語法樹稱之為抽象語法樹。

        接下來是S-屬性文法的自下而上計算和L-屬性文法的自頂向下翻譯。翻譯模式是語法制導定義的一種便於翻譯的書寫形式。其中屬性與文法符號相對應,語義規則或語義動作用花括號{ }括起來,可被插入到產生式右部的任何合適的位置上。這是一種語法分析和語義動作交錯的表示法,他表達在按深度優先遍歷分析樹的過程中何時執行語義動作。翻譯模式給出了使用語義規則進行計算的順序。可看成是分析過程中翻譯的註釋。

二、感想

        這一章的知識比較少,對於我來說,卻是最難理解的,最直接的感受就是在理解屬性文法的時候,“明明都是漢字,偏偏就是讀不明白”,老師上課講的時候聽不懂,自己課下看也看不懂,最後複習的時候才勉強理解,準確的說是自己編了一種理解說服了自己。