怎样构造SLR分析表,使得列表链接运算( SS )为右结合运算
时间: 2023-07-16 11:11:44 浏览: 194
LR0/SLR1分析表构造器
为了让列表链接运算(SS)成为右结合运算,我们需要修改SLR分析表中的移进-规约冲突。具体来说,我们需要将所有的移进-规约冲突都变成规约-规约冲突,并将其中一个规约动作调整为将两个列表链接在一起。
假设我们的文法中有一个规则为:
A -> A SS B | B
我们需要将这个规则转化为右结合形式,也就是:
A -> B R
R -> SS B R | ε
其中,R是一个新的非终结符,代表右结合的部分。在SLR分析表中,需要将移进-规约冲突的状态修改为规约-规约冲突,并将其中一个规约动作修改为规约到R。
例如,假设我们在状态S1中有以下两个项:
A -> A SS B . (1)
B -> b . (2)
其中,(1)表示我们已经识别出了一个A SS B的部分,接下来需要继续匹配B;(2)表示我们已经识别出了一个单独的B。原本,我们会将状态S1的ACTION表中的两个条目分别设置为“移进b”和“规约B -> b”,但是现在我们需要将它们都改为“规约R -> SS B R”。
具体来说,我们需要将状态S1的ACTION表中的内容改为:
| | b | $ |
|---|:---:|:---:|
| 1 | r3 | acc|
| 2 | r3 | r3 |
这里,r3表示规约R -> SS B R。注意,由于R可以是空串,因此在状态S1中还需要添加一条规约R -> ε的规则。这样,当我们在状态S1中识别出了一个A SS B的部分后,就会自动规约成为一个R,继续向后匹配B和R。最终,我们会在状态S1中规约出一个完整的A,并将其传递给上层语法分析器。
阅读全文