题目1
题干
![![[Pasted image 20251105002230.png]]](https://i-blog.csdnimg.cn/direct/7588242c0be84530a2f9585f32c72244.png)
对以上上下文无关文法与对应的串:
- 给出这个串的一个最左推导
- 给出这个串的一个最右推导
- 给出这个串的一棵语法分析树
答
(1)对于文法S -> + S S | * S S | a和输入字符串+ * a a a
最左推导:
S
-> + S S
-> + * S S S
-> + * a S S
-> + * a a S
-> + * a a a
最右推导:
S
-> + S S
-> + S a
-> + * S S a
-> + * S a a
-> + * a a a
语法分析树:
![![[Pasted image 20251105083615.png]]](https://i-blog.csdnimg.cn/direct/3bc1a7aca5884405b8b7994b5c15fa04.png)
(2)对于文法S -> S ( S ) S | ε和输入字符串( ( ) ( ) )
最左推导:
S
-> S ( S ) S
-> ε ( S ) S
-> ( S ) S
-> ( S ( S ) S ) S
-> ( ε ( S ) S ) S
-> ( ( S ) S ) S
-> ( ( ε ) S ) S
-> ( ( ) S ) S
-> ( ( ) S ( S ) S ) S
-> ( ( ) ε ( S ) S ) S
-> ( ( ) ( S ) S ) S
-> ( ( ) ( ε ) S ) S
-> ( ( ) ( ) S ) S
-> ( ( ) ( ) ε ) S
-> ( ( ) ( ) ) S
-> ( ( ) ( ) ) ε
-> ( ( ) ( ) )
最右推导:
S
-> S ( S ) S
-> S ( S ) ε
-> S ( S )
-> S ( S ( S ) S )
-> S ( S ( S ) ε )
-> S ( S ( S ) )
-> S ( S ( ε ) )
-> S ( S ( ) )
-> S ( S ( S ) S ( ) )
-> S ( S ( S ) ε ( ) )
-> S ( S ( S ) ( ) )
-> S ( S ( ε ) ( ) )
-> S ( S ( ) ( ) )
-> S ( ε ( ) ( ) )
-> S ( ( ) ( ) )
-> ε ( ( ) ( ) )
-> ( ( ) ( ) )
语法分析树:
![![[Pasted image 20251105084534.png]]](https://i-blog.csdnimg.cn/direct/d5e110831a8e40e2830a36d1ea9e6cb1.png)
题目2
题干
为题目1中的每一个文法设计一个预测分析器。你可能先要对文法进行提取左公因子或消除左递归的操作。
答
对于文法S -> + S S | * S S | a:
parse_S() {
// S -> + S S | * S S | a
token = nextToken();
switch(token)
if (token == "+") {
move token;
parse_S();
parse_S();
}
if (token == "*") {
move token;
parse_S();
parse_S();
}
if (token == "a") {
move token;
}
else
error("...");
}
对于文法S -> S ( S ) S | ε,先消除左递归得到新文法:
S' -> ( S ) S S' | ε
S -> S'
再写递归下降的预测分析器:
parse_S() {
// S -> S'
token = nextToken();
switch(token)
if (token == "(") {
parse_S_prime();
}
else if (token in [$, (, )]) {
// ε
}
else
error("...");
}
parse_S_prime() {
// S' -> ( S ) S S' | ε
token = nextToken();
switch(token)
if (token == "(") {
move token;
parse_S();
move token;
parse_S();
parse_S_prime();
}
else if (token in [$, (, )]) {
// ε
}
else
error("...");
}
题目3
题干
计算题目1中的各个文法的FIRST和FOLLOW集合。你可能先要对文法进行提取左公因子或消除左递归的操作。
答
(1)对于文法S -> + S S | * S S | a
该文法没有左公因子和左递归。
![![[Pasted image 20251105093703.png|400]]](https://i-blog.csdnimg.cn/direct/9d5c4f8419f4497b8432b5fb458bd4e6.png)
(2)对于文法S -> S ( S ) S | ε
对该文法消除左递归后得到新文法:
S' -> ( S ) S S' | ε
S -> S'
![![[Pasted image 20251130200516.png|400]]](https://i-blog.csdnimg.cn/direct/12ec5dccb5a04c29b386ed2b08e173f0.png)
题目4
判断题目1中的文法是否为LL(1)文法,如果是则填写其LL(1)语法分析表。
答
(1)对于文法S -> + S S | * S S | a
该文法是LL(1)文法,语法分析表如下:
![![[Pasted image 20251105151905.png|350]]](https://i-blog.csdnimg.cn/direct/e5e479794c45430b81fa7963f8da802a.png)
(2)对于文法S -> S ( S ) S | ε
该文法不是LL(1)文法,因为存在左递归。
题目5
为下面的语言设计文法。
(1)所有由0和1组成的并且每个0之后至少跟着一个1的串的集合。
(2)所有由0和1组成的回文(palindrome)的集合,也就是从前面和从后面读结果都相同的串的集合。
答
(1)
S -> 0 1 S | 1 S | ε
(2)
S -> 0 S 0 | 1 S 1 | 0 | 1 | ε
题目7
![![[Pasted image 20251105154131.png|240]]](https://i-blog.csdnimg.cn/direct/0b80c2301df441c2b1eb1e1782fb8cbd.png)
(1)对于以上两个文法,分别画出其LR(0)项集的状态转换图(即DFA)。
(2)判断它们是否为LR(0)文法,是否为SLR(1)文法,给出理由。
(3)如果是LR(0)文法或SLR(1)文法,填出其LR语法分析表。
答
(1)对于文法S -> S S + | S S * | a,得到增广文法
0 : S' -> S $
1 : S -> S S +
2 : | S S *
3 : | a
![![[Pasted image 20251105205345.png]]](https://i-blog.csdnimg.cn/direct/81bbb584287f4f35ba05c9e4c40d4ebf.png)
对于文法S -> a S a | a a,得到增广文法
0 : S' -> S $
1 : S -> a S a
2 : | a a
![![[Pasted image 20251130194205.png]]](https://i-blog.csdnimg.cn/direct/bb3c499bb1dd4ea3962829581608fb0c.png)
(2)对于文法S -> S S + | S S * | a
LR(0)分析表:
![![[Pasted image 20251130195855.png|400]]](https://i-blog.csdnimg.cn/direct/ad973fa925ac4aa8b4dfa923a61d3ca5.png)
是LR(0)文法,因为LR(0)分析表中无冲突。
SLR(1)分析表:
![![[Pasted image 20251130195855.png|400]]](https://i-blog.csdnimg.cn/direct/a987c709e0104ba98ecb29293d647191.png)
是SLR(1)文法,因为SLR(1)分析表中无冲突。
对于文法S -> a S a | a a
LR(0)分析表:
![![[Pasted image 20251130195205.png|400]]](https://i-blog.csdnimg.cn/direct/626df29d20144585a2397e4c5adcbc0f.png)
不是LR(0)文法,因为LR(0)分析表中,状态4输入符号为a时有移进-规约冲突。
SLR(1)分析表:
![![[Pasted image 20251130195205.png|400]]](https://i-blog.csdnimg.cn/direct/09464b8151aa4693a73056eb27afa05d.png)
不是SLR(1)文法,因为SLR(1)分析表中,状态4输入符号为a时仍有移进-规约冲突。
(3)见(2)。
118

被折叠的 条评论
为什么被折叠?



