对于不LL(1)
或LR(1)
一个人如何可以尝试找出是否某些数量n
存在使得语法可LL(n)
或LR(n)
语言?如何识别文法是否是LR(N),LL(N)
通过查看LR(0)
项目的规范集合来检查语法是否为LR(0)
。然后,假设它不是LR(0)
,可以通过引入lookahead符号来检查它是否为LR(1)
。我的简单推理告诉我,为了检查它是否为LR(2)
,您可能必须使前瞻包含接下来的两个符号而不是一个。对于LR(3)
,您必须考虑三个符号等。
即使这种情况,即使我怀疑它,但我很难想出如何才能识别(或甚至获得提示) n
,或其不存在,对此,特定语法可以是LR(n)
和/或LL(n)
,而不从任意向上检查LR(m)
。
你能否详细说明一点NO3一点?人们应该寻找继任者的特征是什么?另外,关于LL语法可以做些什么? –
如果我测试语法并发现它不是LR(1),LR(2),LR(3)(...),那么在某些时候我应该开始寻找可以帮助构建一个案例的特定特征这个语法可能根本不是LR。这样的特征是否会存在?如果是,他们会是什么样子?如果可能的话,类似的情况对于LL案件是可行的吗? –
@Eternal_Light:我试图解决你的问题,但我担心它仍然是非特定的。 SO中有非LR(1)语法的例子,其中大多数都带有“我如何解决这个冲突”这个问题,并且其中很多已经在答案中进行了分析。我通常不会打扰LL的冲突,所以我在那里帮不了你; LL解析器更常见的是要求无界的前瞻,通常的解决方案是切换到LR解析器。 – rici