回答这个问题:有文法:S→aB|bA A→aS|bAA|a B→bS|aBB|b ①该文法的开始符号(识别符号)是什么? ②请给出给出句型aaabbabbba的规范推导。③请给出给出句型aaabbabbba推导树。
时间: 2023-12-06 08:05:53 浏览: 34
好的,我来回答你的问题。
1. 该文法的开始符号是S。
2. 规范推导如下:S → aB → aaS → aabAA → aabaaS → aabaabBB → aabaabaB → aabaababS → aaabbabbba。
3. 给出句型aaabbabbba的推导树如下:
```
S
/ \
a B
/ | \
b A A
/ | \
a A A
/ | \
b A A
/ | \
a B B
/ | \
b S S
/ | \
a B B
/ | \
b A A
/ | \
b S S
/ | \
a B B
/ | \
b a b
```
相关问题
左线性文法: S → aA | bS A → aB | bC | ε B → aA | bS | ε。得到正规表达式
我们可以先将左线性文法转化为等价的右线性文法,然后再使用正规化的方法得到正规表达式。
将左线性文法转化为右线性文法:
S → Aa | Sb
A → ε | aB | bC
B → ε | aA | bS
C → ε | aB
接下来,我们使用正规化的方法得到正规表达式:
1. 将所有的终结符视为正则表达式,并用括号括起来,如 a 变成 (a)。
2. 将所有的产生式按照 | 分隔符进行拆分,每个部分视为一个正则表达式,并用括号括起来。
3. 对于每个左侧非终结符 X,做如下处理:
- 将每个产生式右侧的非终结符 Y 替换成正则表达式 R(Y),其中 R(Y) 是 Y 对应的正则表达式。
- 对于每个产生式右侧的终结符 a,将其替换成 (a)。
按照上述步骤,可以得到以下正规表达式:
S = ((a|b)*a)(ε|((a|b)*a) * b)*
A = ε|(a|b)*a((a|b)*b|((a|b)*a)(ε|((a|b)*a)*b))*(a|b)*
B = ε|(a|b)*a(ε|((a|b)*a) * b|(a|b)*a(ε|((a|b)*a)*b)*(a|b)*b)
C = ε|(a|b)*a((a|b)*b|((a|b)*a)(ε|((a|b)*a)*b)) * (a|b)*
因此,该左线性文法对应的正规表达式为:
((a|b)*a)(ε|((a|b)*a) * b)* for S
ε|(a|b)*a((a|b)*b|((a|b)*a)(ε|((a|b)*a)*b))*(a|b)* for A
ε|(a|b)*a(ε|((a|b)*a) * b|(a|b)*a(ε|((a|b)*a)*b)*(a|b)*b) for B
ε|(a|b)*a((a|b)*b|((a|b)*a)(ε|((a|b)*a)*b)) * (a|b)* for C
编译原理:已知文法 A→fAa|fAg|b 判断该文法是否是 SLR(1)文法
要判断该文法是否是 SLR(1) 文法,需要进行以下步骤:
1. 构造该文法的 LR(0) 自动机;
2. 对于每个 LR(0) 项集,计算它的闭包和转移;
3. 根据 LR(0) 自动机构造 SLR(1) 分析表。
具体步骤如下:
1. 构造该文法的 LR(0) 自动机:
| 0 | A' → ·A
| 1 | A → ·fAa
| 2 | A → ·fAg
| 3 | A → ·b
| 4 | A → fA·a
| 5 | A → fA·g
初始状态为 {0},通过对状态进行闭包和转移,得到如下 LR(0) 自动机:
状态 | 闭包 | 转移
-----|-------------------|-----
0 | A' → ·A | goto 1
| A → ·fAa |
| A → ·fAg |
| A → ·b |
1 | A' → A· |
| A → f·Aa | goto 2
| A → f·Ag | goto 3
| A → ·fAa |
| A → ·fAg |
| A → ·b |
2 | A → fA·a | goto 4
3 | A → fA·g | goto 5
4 | A → fAa· | reduce by A → fAa
| A → ·fAa |
| A → ·fAg |
| A → ·b |
5 | A → fAg· | reduce by A → fAg
| A → ·fAa |
| A → ·fAg |
| A → ·b |
2. 对于每个 LR(0) 项集,计算它的闭包和转移:
LR(0) 项集 {0} 的闭包为 {A' → ·A, A → ·fAa, A → ·fAg, A → ·b},它的转移符号为 f 和 b。
LR(0) 项集 {1} 的闭包为 {A' → A·, A → f·Aa, A → f·Ag, A → ·fAa, A → ·fAg, A → ·b},它的转移符号为 a 和 g。
LR(0) 项集 {2} 的闭包为 {A → fA·a},它没有可进行的转移。
LR(0) 项集 {3} 的闭包为 {A → fA·g},它没有可进行的转移。
LR(0) 项集 {4} 的闭包为 {A → fAa·, A → ·fAa, A → ·fAg, A → ·b},它的转移符号为 f 和 b。
LR(0) 项集 {5} 的闭包为 {A → fAg·, A → ·fAa, A → ·fAg, A → ·b},它的转移符号为 f 和 b。
3. 根据 LR(0) 自动机构造 SLR(1) 分析表:
对于 LR(0) 项集 {0},有:
| | f | b |
|---|---|---|
| A | 1 | |
对于 LR(0) 项集 {1},有:
| | a | g |
|---|---|---|
| A | 2 | 3 |
对于 LR(0) 项集 {4},有:
| | f | b |
|---|---|---|
| A | | 6 |
对于 LR(0) 项集 {5},有:
| | f | b |
|---|---|---|
| A | | 7 |
其中,状态 6 表示使用产生式 A → fAa 进行规约,状态 7 表示使用产生式 A → fAg 进行规约。由于状态 6 和 7 在输入符号为 a 和 g 时都会进行规约操作,会导致冲突,因此该文法不是 SLR(1) 文法。