使用現有語義表示方法來描述乙個語言的語義的難度遠遠大於描述語言語法的難度。
上下文無關文法不僅可以描述乙個語言的語法,還可以指導程式的翻譯過程。一種面向文法的編譯技術,即語法制導翻譯技術。字尾表示式是一種將運算子置於運算分量之後的表示方法。
乙個編譯器前端模型
兩種中間**形式
上下文無關文法
關鍵字if和括號這樣的詞法元素稱為終結符號。像exor和stmt這樣的變數表示終結符號的序列,他們被稱為非終結符號
文法定義
詞法分析器讀入源程式中的字串行,將他們組織為具有詞法含義的詞素。生成並輸出代表這些詞素的詞法單元序列。詞法單元有兩部分組成:名字和屬性值。詞法單元的名字是語法分析器進行語法分析時使用的抽象符號。這些詞法單元名稱為終結符號。因為他們在描述程式語言的文法中是以終結符號的形式出現的。
如果詞法單元具有屬性?
如果某個非終結符號是某個產生式的頭部,我們就說該產生式時該非終結符號的產生式。乙個終結符號串是由零個或者多個終結符號組成的序列。零個終結符號組成的串稱為空串。
推導語法分析的任務
二義性語法制導翻譯
屬性:屬性表示與某個程式構造相關的任意的量。屬性可以是多重多樣的,比如表示式的資料型別、生成的**中指令數目或為某個構造生成**中第一條指令的位置都是屬性。用文法符號(終結符號或非終結符號)表示程式的構造,所有將屬性的概念從程式構造擴充套件到表達這些構造的文法符號上。
翻譯方案:翻譯方案是一種將程式片段附加到乙個文法的各個產生式上的表示法。當在語法分析過程中使用乙個產生式,響應的程式片段就會執行。這些程式片段的執行效果按照語法分析過程中順序組合起來,得到的結果就是這次分析/綜合過程處理源程式得到的翻譯結果。
綜合屬性
簡單語法制導定義
* 要得到**產生式頭部的非終結符號的翻譯結果的字串,只需要將產生式體中各非終結符號的翻譯結果按照他們在非終結符號中的出現順序,並在其中穿插一些附加的串即可。具有這個性質的語法制導定義稱為簡單語法制導定義。
語法分析
遞迴下降
**分析法
左遞迴非終結符號r和他的產生式r->ar是右遞迴的。因為這個產生式的右部,因為這個產生式的右部最後乙個符號就是r本身。右遞迴的產生式會使樹向右下方向生長。因為樹是向右下生長的,對包含了左結合運算子的表示式就變得比較困難。
左遞迴消除
詞法分析
編譯原理 2
lexical analyise 如果乙個單詞和任何乙個模式都不匹配,進行錯誤恢復。錯誤的模式 正規表示式 e.g.l a e.g.l xi 選擇操作 r s,整體匹配 r 能夠匹配的串或 s 能夠匹配的串。l a b l a lor l b 連線操作 rs,匹配 r 緊接著 s 能夠匹配的串 l ...
編譯原理複習2
先打一發廣告,我這個部落格一開始就是用於記錄演算法的學習過程的,後來乾脆想著把課堂筆記也整理整理放上來。想想這學期快結束了,下學期開始又要開始學習演算法啦。我是準備從0開始學習的,借助於高中生資訊學競賽的平台。歡迎各位各類同學加進來,笑著問我為什麼刷那麼慢,或者跟我一起從0開始。歡迎對照對邊導航欄,...
編譯原理(2) 文法推導
這一篇講一講形式文法的推導,學習是乙個持之以恆的過程,尤其是像我這種初學者了。注 這一篇的例子來自於統計自然語言處理這本書 形式文法的推導比較好理解,即按文法g中的規則p推導 的符號串,且b c是p中的乙個產生式,那麼,abc adc。1 的傳遞閉包,即 n 上的符號串xi到xi 1至少經過一步推導...