Engineering a Compiler讀書筆記(3)

語法分析器


語法分析

語法分析器處理來自詞法分析器的單詞流,其職責是識別語法,確定被編譯的程序是不是程序設計語言的語法模型中的一個有效語句。語法模型又一個形式語法G來表示,若單詞串s屬於G中定義的語言,則說G可以推導出s。
而語法分析器中:找到G中生成s的一個推導 的過程稱爲語法分析

|| 語法分析算法的兩種通用類型
自頂向上的語法分析器試圖通過(在各個單詞上)預測下一個單詞,依照語法的產生式來匹配輸入流。這種算法,對於有限的語法而言高效精確
自底向上的語法分析器從底層(實際的單詞序列)開始,不斷積累上下文信息,直至出現顯然的推導爲止。

|| 語法的表示:
正則表達式往往不具有完整描述語法的能力(描述較短的詞使用),我們通常用上下文無關語法(CFG)的形式來表示程序設計語言的語法

上下文無關語法

|| CFG中的概念:

  • G是一組規則,描述了語句是如何形成的。可以從G導出的語句集成爲G定義的語言,記作L(G)
  • CFG定義的所有語言的集合,叫做上下文無關語言的集合
  • 非終結符和終結符:CFG中語法變量稱爲非終結符(用於向語言添加結構和抽象)每一個單詞都是一個終結符
    在這裏插入圖片描述這裏的SheepNoise爲語法變量
  • 產生式:CFG中的每個規則都都稱爲一個產生式
  • 產生式中的目標符號和起始符號:目標符號表示L(產生式)中所有符號串的的集合,因此目標符號只能是用於向語言添加結構和抽象的非終結符,而非某個單詞即終結符

|| CFG推導的過程(即重寫)
在推導中,我們根據一個語法規則a—>b(產生式),將原型符號串中的a重寫爲b。重複這個重寫過程,直到原型符號中不再包含非終結符爲止。
總結:推導就是將所有非終結符重寫爲終結符的過程,它從語法的起始符號開始,結束域語言中的一個語句
ps: 符號串處於推導中的某一個有效推導過程步驟時,稱之爲句型。最後符號串被重寫稱只包含終結符時,該符號串變成L(SN)中的一個語句
ps:推導可以分爲最右推導 和 最左推導。最右推導,在每一個步驟都重寫最右側的非終結符

|| CFG的形式化
形式上CFG是一個四元組 (T, NY, S, P),各分量的解釋如下:

  • T — 是終結符或者L(G)中單詞的集合
  • NT — 是G的產生式中出現的非終結符的集合。
  • S — 是語法指定的目標符號或者起始符號
  • P — 是G中產生式或重寫規則的集合

|| 語法分析樹表示CFG推導過程的樹稱爲語法分析樹 / 語法樹
在這裏插入圖片描述
在這裏插入圖片描述
可以看到語法樹只表明其使用了哪些規則,並不能說明順序。

|| 二義性:
如果某個語句有一個以上最左(或最右)推導,那麼語法G就是二義性;


未完。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章