我搜索了Java 8的语法并找到了这个:https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4
但即使我尝试分析语法,我也不会遇到LL解析的问题。 有谁知道这是否属实,知道一个科学证明,或者只是可以向我解释为什么找不到可以LL解析的Java语法结构?
非常感谢你们。
答案 0 :(得分:2)
Java Language Specification for Java 7表示不是LL(1)
:
本章介绍的语法是该语法的基础 参考实施。但请注意,它不是LL(1)语法 在许多情况下,它最大限度地减少了必要的前瞻。
如果你找到:
(A|B)
,两个或多个备选方案的交集共享相同的FIRST
集合; FIRST(A)
还有FIRST(B)
您的语法不会是LL(1)
。
答案 1 :(得分:0)
我认为这是由于左递归造成的。 LL解析器无法处理左递归,并且在某些情况下使用它们指定了当前的Java语法,至少是Java 7.
当然,众所周知,可以构造等效语法来摆脱左递归,但在其当前规范中,Java语言无法进行LL解析。