我如何找到该语言的LL(1)语法:
L = a m b n c m + n
m和n是自然界的元素吗?我的无上下文语法是:
S→AB
A→acA | AC
B→bcB | BC
有人能告诉我,我是否走在正确的轨道上?
编辑:我的新CFG
S→aSc |乙
B→bBc | BC
但是我想我可能有关于LL(1)的错误,因为B的两个推导都以b ...开头是正确的吗?
修改 谢谢,我想我明白了:
S→aSc |乙
B→bBc |拉姆达
答案 0 :(得分:1)
你的语法有两个主要问题:
您目前可以生成一些不在语言中的字符串。例如,你的语法可以生成acacbcbc,而不是语言。
您的语法不是LL(1),因为您有许多FIRST / FIRST冲突。例如,一对产品A→acA和A→ac都以a开头,因此给定非终结符号A和字符a,您无法确定要应用哪种生产。
作为提示,您所用语言中的字符串恰好是 m b n c n c 形式的字符串米。换句话说,试着看看你是否可以在前面生成m a,在后面生成m c,然后切换并生成与n c匹配的n b。您可能想先尝试为 m c m 查找语法,看看是否可以对其进行调整。
编辑新语法:这看起来好多了!但是,您在制作中仍然存在FIRST / FIRST冲突
B→bBc
和
B→bc
此外,您的语法无法生成字符串ac
或ε。您应该能够通过修复FIRST / FIRST冲突来解决这两个问题。作为提示:你如何用一个不产生字符的产品替换第二个产品?
希望这有帮助!