Java LR或LL解析

时间:2014-09-17 08:14:40

标签: java parsing grammar language-lawyer

我的老师说,Java不能被LL解析。 我不明白这一点,并想知道这是否属实。

我搜索了Java 8的语法并找到了这个:https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4

但即使我尝试分析语法,我也不会遇到LL解析的问题。 有谁知道这是否属实,知道一个科学证明,或者只是可以向我解释为什么找不到可以LL解析的Java语法结构?

非常感谢你们。

2 个答案:

答案 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解析。