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

如何反驳 LL(3) 的语法?

如何解决如何反驳 LL(3) 的语法?

我编写了以下语法:

S -> a a a t | a a a a

我试图证明它不是 LL(3)。我发现 First(S)={a}Follow(S)={$} 但我似乎无法弄清楚我需要做什么来反驳它是 LL(3)。这是我为自己构建的一个小语法,以了解如何反驳 LL(k)。对于 LL(1),我构建了一个表格,并在每个字段中插入了规则库,首先/跟随。但是使用前瞻 3 我该怎么做?

解决方法

要证明一个语法是(不是)LL(3),你需要为它构造一个 LL(3) 解析器,并证明结果表中存在(或不存在)冲突。

要为 LL(3) 构造解析器表,您需要 FIRST3 和 FOLLOW3,它们类似于 FIRST 和 FOLLOW,除了它们是(最多)3 个令牌,而不是单个令牌集。所以你得到 FIRST3(S) = { "aaa" } ,它可以选择 S 的任何一个产生式,给你在这些产生式之间的表中产生冲突。

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