有文法G[E`]: E`->E, E->L|a, L->(S), S->SS|E, 怎样构造SLR分析表,使得列表链接运算( SS )为右结合运算
时间: 2023-07-16 21:11:25 浏览: 179
LR1 文法 四则运算分析表的构造
4星 · 用户满意度95%
首先,我们需要构造文法G[E`]的LR(0)自动机。LR(0)自动机是一种有限状态机,可以根据输入的符号序列决定是否接受该序列。
下面是文法G[E`]的LR(0)自动机:
![LR(0)自动机](https://i.imgur.com/GzXhY9x.png)
接下来,我们需要构造该自动机的SLR分析表。SLR分析表包括以下几个部分:ACTION表、GOTO表、状态集合和项集簇。
1. 状态集合
状态集合包括所有的状态(节点)和它们的编号。在这个例子中,状态集合为{0, 1, 2, 3, 4, 5, 6, 7}。
2. 项集簇
项集簇表示在每个状态下可能出现的所有项。在这个例子中,我们可以得到以下项集簇:
I0:
E' -> .E
E -> .L
E -> .a
L -> .(S)
S -> .SS
S -> .E
I1:
E' -> E.
I2:
L -> (.S)
S -> .SS
S -> .E
I3:
S -> S.S
S -> .SS
S -> .E
I4:
E -> L.
I5:
L -> (S.)
I6:
S -> SS.
I7:
E -> E.L
3. ACTION表
ACTION表用于处理终结符的移入和规约操作。在这个例子中,ACTION表如下:
| 状态 | ( | ) | a | L | E | $ |
| --- | --- | --- | --- | --- | --- | --- |
| 0 | S4 | | S5 | S2 | S1 | |
| 1 | | | | | | acc |
| 2 | S4 | R3 | S5 | S2 | S8 | R3 |
| 3 | S4 | | S5 | S2 | S7 | |
| 4 | | R2 | | | | R2 |
| 5 | S4 | R5 | S5 | S2 | | R5 |
| 6 | | R1 | | | | R1 |
| 7 | | R4 | | | | R4 |
其中,S表示移入,R表示规约,acc表示接受。例如,ACTION[0, a] = S5 表示在状态0遇到终结符a时要移入到状态5。
4. GOTO表
GOTO表用于处理非终结符的移入操作。在这个例子中,GOTO表如下:
| 状态 | L | S | E |
| --- | --- | --- | --- |
| 0 | 2 | 3 | 6 |
| 2 | 2 | 3 | 7 |
| 3 | | | |
| 4 | | | |
| 5 | | | |
| 7 | | | |
例如,GOTO[0, L] = 2 表示在状态0遇到非终结符L时要移入到状态2。
通过SLR分析表,我们可以进行语法分析并检查输入序列是否符合文法G[E`]的规则。由于题目要求列表链接运算为右结合运算,我们需要对文法进行修改,使得规约时能够将右结合的运算符合并成一个符号。修改后的文法如下:
```
E' -> E
E -> L | a
L -> (S)
S -> SS | E
S -> S , E
```
其中,逗号表示列表的连接操作。
最后,我们使用构造好的SLR分析表对输入序列进行分析,如果能够成功地匹配到终结符,就说明输入序列符合文法G[E`]的规则,并且列表链接运算为右结合运算。
阅读全文