设有如下文法 G: <S>→<A> <A>→<B><A>|eε<B>→a<B>|b (1)试用识别活前缀的方式给出文法C的LR(1)项目集。
时间: 2024-05-27 16:06:47 浏览: 20
根据LR(1)分析算法的原理,需要构建文法G的LR(1)项目集。LR(1)项目集的构建过程中,需要用到闭包操作和移进-归约操作。
下面是文法G的LR(1)项目集:
I0:
<S'> → .<S> [$]
<S> → .<A> [$]
<A> → .<B><A> [$]
<A> → . [$]
<B> → .a [<B>, $]
<B> → .b [<B>, $]
I1:
<S'> → <S>. [$]
I2:
<A> → <B>.<A> [$]
<B> → .a [<B>, <A>]
<B> → .b [<B>, <A>]
I3:
<A> → <B><A>. [$]
<B> → .a [<B>, <A>]
<B> → .b [<B>, <A>]
其中,每个项目都包含三个要素:产生式、位置标记和向前看符号。位置标记"."表示当前扫描到的符号,而向前看符号表示跟在该产生式后面的符号,$表示输入串的结束符。
相关问题
设有如下文法G: <S>-→a<s><s>b <S>→→a<s><s><s> <S>→c (1)计算该文法的LR(0)项目集规范族,构造识别相应文法的所有规范句型活前缀的DFA。(2)该文法是LR(0)文法吗?若是,给出其LR(0)分析表。
(1)首先列出文法G的所有产生式的LR(0)项目:
```
S' -> ·S
S -> ·a<S><S>b
S -> ·a<S><S><S>
S -> ·c<S>
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
<S> -> ·c<S>
```
然后,构造出该文法的LR(0)项目集规范族:
```
I0:
S' -> ·S
S -> ·a<S><S>b
S -> ·a<S><S><S>
S -> ·c<S>
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
<S> -> ·c<S>
I1:
S' -> S·
I2:
S -> a<S>·<S>b
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
I3:
S -> a<S><S>·b
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
I4:
<S> -> a<S>·<S>b
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
I5:
<S> -> a<S><S>·<S>b
I6:
S -> c·<S>
I7:
<S> -> c·<S>
I8:
<S> -> a<S>·<S><b
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
I9:
<S> -> a<S><S>·<S><b
I10:
<S> -> a<S><S><S>·
I11:
<S> -> a<S>·<S><b
I12:
<S> -> c<S>·
I13:
<S> -> a<S><S>·
I14:
<S> -> ·c<S>
I15:
S -> a·<S><S>b
<S> -> ·a<S><S>b
<S> -> ·a<S><S><S>
I16:
<S> -> a·<S><S><S>
I17:
<S> -> a·<S><b
```
接下来,根据项目集规范族构造出识别相应文法的所有规范句型活前缀的DFA。DFA的状态集合即为项目集规范族,DFA的转移条件为当前状态在读入某个符号后转移到哪个状态。最终得到的DFA如下图所示:
![LR(0) DFA](https://img-blog.csdn.net/20180619150733509?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3B1c2hpbmdfYmFuZ19sb3Zl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
(2)为了判断该文法是否为LR(0)文法,需要检查其所有产生式右部的FIRST集和FOLLOW集是否存在交集。由于该文法的所有产生式右部不含ε,因此可以通过检查右部的FIRST集来判断是否存在规约-归约冲突。
对于文法G,可以得到其所有产生式右部的FIRST集如下:
```
FIRST(a) = {a}
FIRST(b) = {b}
FIRST(c) = {c}
FIRST(<S>) = {a, c}
```
从上述FIRST集可以看出,该文法不存在规约-归约冲突。因此,该文法是LR(0)文法。
下面给出该文法的LR(0)分析表:
| 状态 | a | b | c | S | <S> | $ |
| :--: | :-----: | :-----: | :-----: | :----: |
| 0 | s2 | | s6 | 1 | 5 | |
| 1 | s2 | | s6 | | 7 | acc |
| 2 | s2 | | s6 | 3 | 5 | |
| 3 | s2 | | s6 | | 4 | |
| 4 | | s8 | | | | |
| 5 | | | s6 | | 9 | |
| 6 | s2 | | s6 | | 7 | |
| 7 | | s10 | | | | |
| 8 | | | | | | r3 |
| 9 | | | s6 | | 11 | |
| 10 | | | | | | r1 |
| 11 | | s12 | | | | |
| 12 | | | | | | r2 |
其中,s表示移进操作,r表示规约操作,acc表示接受操作。
设有如下文法 G: <S>—>a<S><S>b <S>—>a<S><S><S> <S>—>c (1)计算该文法的LR(0)项目集规范族,构造识别相应文法的所有规范句型活前缀的 DFA。 (2)该文法是LR(0)文法吗?若是,给出其LR(0)分析表。 给出计算过程
(1)首先计算该文法的LR(0)项目集规范族:
I0:
<S>' -> .<S>
<S> -> .a<S><S>b
<S> -> .a<S><S><S>
<S> -> .c
I1:
<S>' -> <S>.
I2:
<S> -> a.<S><S>b
<S> -> .a<S><S>b
<S> -> .a<S><S><S>
<S> -> .c
I3:
<S> -> a<S>.<S>b
<S> -> .a<S><S>b
<S> -> .a<S><S><S>
<S> -> .c
I4:
<S> -> a<S><S>.b
<S> -> .a<S><S>b
<S> -> .a<S><S><S>
<S> -> .c
I5:
<S> -> a<S><S><S>.
I6:
<S> -> a<S>.<S><S>b
<S> -> .a<S><S>b
<S> -> .a<S><S><S>
<S> -> .c
I7:
<S> -> a<S><S>b.
I8:
<S> -> a<S><S><S>.
I9:
<S> -> a<S><.S>b
<S> -> .a<S><S>b
<S> -> .a<S><S><S>
<S> -> .c
I10:
<S> -> a<S><.S><S>
I11:
<S> -> a<S><.S>b
I12:
<S> -> a<S><<.S>b
<S> -> a<S>.<S>b
I13:
<S> -> a<S><<.S><S>
I14:
<S> -> a<S><<.S>b
I15:
<S> -> a<S><<.S><S>
I16:
<S> -> a<S><<.<S>>b
I17:
<S> -> a<S><<.<S>>b
I18:
<S> -> a<S><<.<S>>b
然后我们可以根据这个项目集规范族构造出识别该文法的所有规范句型活前缀的 DFA,具体构造过程见下图:
![image.png](https://cdn.nlark.com/yuque/0/2021/png/97322/1623005783898-5dcf-4d43-af2d-83f9335bb7e2.png#align=left&display=inline&height=394&margin=%5Bobject%20Object%5D&name=image.png&originHeight=788&originWidth=890&size=54815&status=done&style=none&width=445)
(2)接下来判断该文法是否为LR(0)文法。我们可以根据LR(0)自动机的状态转移表来判断是否存在冲突。由于状态转移表较大,这里不方便展示。我们可以看到,在状态I4中存在归约-移进冲突,因此该文法不是LR(0)文法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)