Chapter 4(Part 1):語法分析

4.1 Introduction

語法分析是將詞法單元構造成語法樹。也與符號表有關

parser
sequence-of-tokens
Syntax-tree

三種語法分析方法:(常用後兩者)

  • universal 通用
  • top-down 自頂向下
  • bottom-up 自底向上

錯誤恢復

  • 恐慌模式:發生錯誤捨棄後面的輸入,直到找到正確token
  • 短語層次恢復:對後面局部性糾正,替換前綴爲可能正確的串
  • 錯誤產生式:構造可能錯誤語句的產生式,如果符合,進行對應的錯誤處理
  • 全局糾正:通過最小改動序列,得到全局開銷最低糾正方案

4.2 上下文無關文法

non-terminal 非終止符:表示還能替換成其他形式的結構。一般用大寫字母或者小寫名字標識
terminal 終止符:不能再替換了的符號,一般是運算符、界符、數字
start symbol 開始符:一般是在語法規則第一個,通常是exp或S

產生式

example :

exp -> exp op exp | (exp) | number
-> 左邊是結構的名字
-> 右邊是由 | 分隔開的由terminal和nonterminal組成的文法符號串(說白了就是語法結構)
這裏的意思用大白話說就是,exp可以替換成 exp op exp 或者(exp) 或者 number三種形式

特殊產生式

左遞歸:A->Aα
右遞歸:A->αA

推導 derivation

將開始符S(一定是nonterminal),通過產生式的替換,向目標字符串接近,
推導可以證明該句子符合該語法

- 最左推導:優先替換最左邊的非終結符
- 最右推導:優先替換最右邊的非終結符

4.3 表示語法

二義性語法:存在一個字符串在該語法下有兩個不同的最左(右)推導或者語法樹
用定義證明語法具有二義性

如何消除二義性:

  1. 優先級越低,放在離開始符越近
  2. 最近嵌套
  3. 結合方向
    左遞歸產生式的運算符是左結合的,右遞歸產生式的運算符是右結合的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章