Java Compiler Compiler (JavaCC) 是 Java 应用程序最流行的一种解析器生成器。解析器生成器是一种可以读取语法规范并将其转换为能够识别与匹配语法规范的一段 Java 程序。除了解析器生成器本身,JavaCC 还提供了与解析器生成相关的其他功能,例如树构建(通过 JavaCC 附带的 JJTree 工具)、操作和调试。一旦生成 JavaCC 解析器,运行它只需要 Java 运行时环境(JRE)。
1. 特性
- JavaCC 生成的是自顶向下(递归下降)的解析器,而不是像由 YACC 类似工具生成的自底向上的解析器。尽管不允许左递归,但是这样可以使用更通用的语法。自顶向下解析器还有许多其他优点(除了更通用的语法之外),比如更容易调试,能够解析语法中的任何非终结符,还能够在解析期间在解析树中上下传递值(属性)。
- 默认情况下,JavaCC 生成一个
LL(1)
解析器。然而,可能有一部分语法不是LL(1)
。JavaCC 提供了语法和语义前瞻性的功能,可以在这些点上解决本地的移位歧义。例如,解析器仅在这些点上是LL(k)
,但在其他地方保持LL(1)
以获得更好的性能。对于自顶向下的解析器来说,Shift-reduce 和 reduce-reduce 冲突不是问题。 - JavaCC 生成 10