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

同系列链接

【北航编译原理笔记】1. 基础知识
【北航编译原理笔记】2. 词法分析
【北航编译原理笔记】3. 语法分析
【北航编译原理笔记】4. 语义分析与符号表

语法分析

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

与词法分析的区别:

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

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

自底向上: 主要问题:

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

自顶向下: 主要问题:

  1. 二义性问题:

    ​ 用优先级层次定义文法

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

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

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

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

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

    ​ 保证 F I R S T ( a i ) ⋂ F I R S T ( a j ) = ϕ ( i ≠ j ) FIRST(a_i) \bigcap FIRST(a_j) = \phi (i \neq j) FIRST(ai)FIRST(aj)=ϕ(i=j).

    ​ 相交则提取左因子

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值