如何生成第一个上下文无关文法集
How to generate the FIRST set of this context-free grammar
我一直在寻找这个上下文无关文法的"first set"。我想出了 2 个答案,但我不确定它们是否正确。如果有人可以解释如何生成此语法的第一组,我将不胜感激。
两个答案都以不同的方式写成,因为我读过的资料是用不同的语法解释的。
有问题的语法:
E1 -> E2+E1|E2
E2 -> num*E2|num
我的第一个回答:
| A -> α | FIRST(α) |
|:----------- |------------:|
| E1 -> E2+E1 | {num, num} |
| E1 -> E2 | {num, num} |
| E2 -> num*E2 | {num} |
| E2 -> num | {num} |
我的第二个回答:
FIRST(E1) = {num}
FIRST(E2) = {num}
FIRST集合最常用的定义是FIRST(S)是可以出现在从S开始的某个推导开始的终结符集合,如果也可以推导空字符串则加上ε .
这里,注意FIRST(S1) = FIRST(S2) 因为从S1 开始的任何推导都必然以从S2 推导的东西开始,而S2 不能推导空字符串。然后,FIRST(S2) = {num} 因为 S2 的每个产生式都以 {num} 开头。
所以是的,FIRST(S1) = FIRST(S2) = {num}。
您计算 FIRST(S1) 和 FIRST(S2) 的特定方法 - 即查看产生式并查看产生了什么 - 是一个很好的方法。
我一直在寻找这个上下文无关文法的"first set"。我想出了 2 个答案,但我不确定它们是否正确。如果有人可以解释如何生成此语法的第一组,我将不胜感激。
两个答案都以不同的方式写成,因为我读过的资料是用不同的语法解释的。
有问题的语法:
E1 -> E2+E1|E2
E2 -> num*E2|num
我的第一个回答:
| A -> α | FIRST(α) |
|:----------- |------------:|
| E1 -> E2+E1 | {num, num} |
| E1 -> E2 | {num, num} |
| E2 -> num*E2 | {num} |
| E2 -> num | {num} |
我的第二个回答:
FIRST(E1) = {num}
FIRST(E2) = {num}
FIRST集合最常用的定义是FIRST(S)是可以出现在从S开始的某个推导开始的终结符集合,如果也可以推导空字符串则加上ε .
这里,注意FIRST(S1) = FIRST(S2) 因为从S1 开始的任何推导都必然以从S2 推导的东西开始,而S2 不能推导空字符串。然后,FIRST(S2) = {num} 因为 S2 的每个产生式都以 {num} 开头。
所以是的,FIRST(S1) = FIRST(S2) = {num}。
您计算 FIRST(S1) 和 FIRST(S2) 的特定方法 - 即查看产生式并查看产生了什么 - 是一个很好的方法。