前言
更新中。。。跳過目錄
假定:語法成分翻譯動作子程式引數設定:
1、上下文有關分析: 即識別符號的作用域
2、型別的一致性檢查
3、語義處理:
語義處理的任務:按某種操作的目標結構生成中間**或目標**。
begin begin … begin α int i β i end … i … end
…begin
αint i
β iend
… i …
end例如,對於有巢狀子程式結構的程式段:
用上下文無關文法只能描述語言的語法結構,而不
能描述其語義!此時最好採用上下文相關文法進行描述。
若存在文法規則: var ::= i 則
begin … begin α int i β var end … i … end
此時內層子程式可歸約為
begin … … i … end
begin … δ var … end δ∈ v*且不包含變數 i 的宣告
∴ 文法規則應改為: int i β var ::= int i β i
第一次i的歸約正確
第二次i的歸約錯誤
上下文相關文法5
然而上下文有關文法不僅構造困難,而且其分析
器十分複雜,分析效率又低,顯然不實用。
處理這種上下文有關問題的一般方法,使用專門
的語義動作來補充上下文無關分析器的動作,即借助
語義分析來解決。
通常我們把與語義相關的上下文有關資訊填入符
號表中,並通過查符號表中的這些資訊來分析程式的
語義是否正確。6
編譯原理學習筆記 自上而下分析
語法分析 自上而下分析 面臨的問題 左遞迴性問題 例如 p pa 如果存在非終結符p含有左遞迴的文法將上述自上而下的分析過程陷入無限迴圈 回溯?ll 0 分析法 左遞迴的消除p p 改寫為p p p p 消除左遞迴的做法 把文法g的所有非終結符按人一種順序排列成p1,p2 pn,按此順序執行 for...
編譯原理語義分析 編譯原理 語義分析和符號表
本文使用 zhihu on vscode 創作並發布經過詞法分析 語法分析之後,源程式形式上和結構上的正確性基本得到了保證。然而,僅有形式上的正確性,並不能保證源程式就是完全正確的,還要檢查源程式的含義是否正確。諸如符號的使用是否得當,表示式的型別是否相容等,完成這些功能的編譯階段稱為語義分析。語義...
編譯原理學習筆記 語法
高階程式語言可分為 1.強制性語言 2.作用時語言 3.基於規則的語言 4.物件導向的語言 程式語言主要由語法,語義,語用 語用 有關程式設計和語言成分的使用方法,它使語言的基本概念與外界的語言 如數學概念或計算機的物件和操作 聯絡起來。語法 語法是指這樣的一組規則,用它可以形成和產生乙個合式的程式...