【编译原理】3 语法分析

1 自顶向下的语法分析

1.0 必须要做的事

1.0.1 消除左递归

【编译原理】3 语法分析
【编译原理】3 语法分析

1.0.2 提取公共左因子

【编译原理】3 语法分析

1.1 递归下降分析法

实验

1.2 LL(1)分析法(预测分析法)

  1. 求FIRST集
    【编译原理】3 语法分析

  2. 求FOLLOW集
    【编译原理】3 语法分析

  3. 判断是否是LL(1)文法
    【编译原理】3 语法分析

  4. 构造分析表
    【编译原理】3 语法分析

  5. 规则
    【编译原理】3 语法分析
    【编译原理】3 语法分析
    【编译原理】3 语法分析

2 自底向上的语法分析

2.1 LR表构造法说明

【编译原理】3 语法分析

2.2 LR(0)分析法

  1. 拓广文法:S’ → T
  2. 构造项目集簇
    【编译原理】3 语法分析
  3. 判断是否为LR(0)文法
    【编译原理】3 语法分析
  4. 构造LR(0)分析表
    【编译原理】3 语法分析

2.3 SLR(1)分析法

  1. 拓广文法:S’ → T
  2. 构造项目集簇
  3. 判断是否是SLR(1)文法
  4. 构造FOLLOW集
  5. 解决冲突
    【编译原理】3 语法分析
  6. 构造SLR(1)分析表
    【编译原理】3 语法分析

2.4 LR(0)和SLR(1)的异同点


  • 都用规范归约的方法寻找句柄,即LR分析器的每一步工作都是由栈顶状态和现行输入符号唯一决定的

  • 寻找句柄的方法不同。若当前的栈顶状态为归约状态:
    (1)对于LR(0),无论现行输入符号是什么,都认为栈顶的符号串为句柄而进行归约
    (2)对于SLR(1),则对现行输入符号加了一点限制,即该输入符号必须属于允许跟在句柄之后的字符,才认为栈顶的符号串为句柄而进行归约

3 示例

有空单独讲