微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FIRST SET 是否可能多次包含相同的终端

如何解决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,它对我很有帮助,如果你对自顶向下的解析有任何问题,你不妨看看这个slidethis

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。