如何解决FIRST SET 是否可能多次包含相同的终端
我很困惑 FirsT SET 可以包含相同的终端两次.. 例如我有语法
E->T+E|T FirsT(E)={a,a}
T->a FirsT(T)={a}
..
这是正确的吗?或者我应该写
FirsT(E)={a}
解决方法
根据定义,集合不能多次包含相同的元素 - 这适用于第一个集合和任何其他集合一样。所以 {a}
是正确的写法。
我猜您正在尝试计算 First 和 Follow 集,以构建最终的预测表,但通常,您需要先解决所有冲突,即:
ε-derivation
Direct Left Recursion
Indirect Left Recursion
Ambiguous prefixes
在您的示例中(或者我猜是其中的一部分),您需要排除模棱两可的前缀,即 T。
E -> T E'
E' -> + E | ε
T -> a
形式上,对于任何具有 A → αβ 形式的推导规则的非终结符 | αγ
1- Remove these 2 derivation rules
2- Create a rule A′ → β | γ
3- Create a rule A → α A′
看看这个Paper about Conflicts,它对我很有帮助,如果你对自顶向下的解析有任何问题,你不妨看看这个slide和this。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。