考虑文法 s➡AS|b A➡SA|a 画出这个文法的LR(0)分析表
时间: 2024-01-05 10:22:12 浏览: 219
计++LR(0)类文法的判断及分析表的构造
3星 · 编辑精心推荐
首先,我们需要计算出该文法的所有 LR(0) 项目集。计算过程如下:
初始项目集:{S' -> .AS}
计算闭包:
{S' -> .AS}
{A -> .SA, .a}
{S -> .A, .b}
对于每个项目集 I,以及每个文法符号 X,计算 GOTO(I, X):
GOTO({S' -> .AS}, A) = {A -> .SA, .a}
GOTO({S' -> .AS}, b) = {S -> .A, .b}
GOTO({A -> .SA, .a}, S) = {S -> .A, .b}
GOTO({S -> .A, .b}, endmarker) = {S' -> AS.}
计算 LR(0) 分析表:
| | a | b | S | A | endmarker |
|:-:|:-:|---|:-:|:-:|:--------:|
| 0 | | | 2 | 1 | |
| 1 | | | | | accept |
| 2 | 3 | 4 | | | |
| 3 | | | | | r2 |
| 4 | | | | 5 | r1 |
| 5 | | | | | r2 |
其中:
- 空格表示该项为空
- 数字表示对应的项目集编号
- s 表示 shift,r 表示 reduce,accept 表示接受状态
因此,对于该文法,LR(0) 自动机如下所示:
```
+--------+ a +--------+
| |--------------| |
| 2 | | 3 |
| | S | |
+--------+--------------+--------+
| b | | a |
| v S v |
+--------+--------------+--------+
| | | |
| 4 | | 5 |
| | A | |
+--------+ +--------+
```
阅读全文