【编译原理】自底向上

LR(K)

Step

  1. Shift: 将输入串最前面的字符入栈。
  2. Reduce: 查看栈顶的字符是否符合文法,符合将其换为对应的非终结符。(往左换)

增广: S ′ → S S' \rightarrow S SS

Reduce的时机

when the handle occur

Handle: 分析树中最左边具有父子两代的子树的树叶节点。

describe

  • L: from left to right
  • R: rightmost derivation
  • K: look ahead

LR(0) Item

产生式最右边添加一个唯一的位置信息。

原文法: A → β s A\rightarrow \beta s Aβs
项目(item): A → β ⋅ s A\rightarrow \beta · s Aβs

点左边的是已经观察到的,点右边的是期望符号。

  • initial item 初始项目
  • complete item 完整项目,找到就找到handle了。

可以使用NFA->DFA解决。

构造DFA

  • 将文法表达式构造增广文法 S ′ → S S' \rightarrow S SS
  • 构造初始项目,如果遇到非终结符展开非终结符。
  • 枚举全部情况往下看一个,直到找到一个完整项目,分支结束。

语法分析表

StateActionGoto
no.s_i, R_jno.

s_i :进入到i状态
r_j : 使用标号为j的文法规约

Goto: 非终结符号的转换,其中填状态的编号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值