【北航编译原理笔记】3. 语法分析

语法分析

任务:根据语法规则 (即语言的文法),分析并识别出各种语法成分,如表达式、各种说明、各种语句、过程、函数等,并进行语法正确性检查.

与词法分析的区别:

  1. 词法分析(3型, 正则文法), 语法分析(2型, 上下文无关文法)
  2. 字母表区别: 词法(字符串), 语法(符号串)

自顶向下分析: 推导(Derivations)
自底向上分析: 规约(Reductions)

自底向上: 主要问题:

  1. 句柄识别问题: 算符优先分析法

自顶向下: 主要问题:

  1. 二义性问题:

    ​ 用优先级层次定义文法

  2. 左递归问题(导致死循环):

    U::=xy  xw ... xyU ::= xy\ |\ xw\ |...|\ xy改写为U::=x(y  w ... z)U::=x(y\ |\ w\ |...|\ z).

    U::=x  xyU ::= x\ |\ xy改写为U::=x(y  ε)U::=x(y\ |\ \varepsilon).

    U::=x  y ... z  UvU ::= x\ |\ y\ |...|\ z\ |\ Uv改写为U::=x(x  y ... z){v}U::=x(x\ |\ y\ |...|\ z)\{v\}.

  3. 回溯问题(导致费时)

    ​ 保证 FIRST(ai)FIRST(aj)=ϕ(ij)FIRST(a_i) \bigcap FIRST(a_j) = \phi (i \neq j).

    ​ 相交则提取左因子

    ​ 必要时,可以超前扫描,预读下一个字符.

递归子程序法(递归下降分析法): 对每一个非终结符都建立一个子程序

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