生成独立代码的Java解析器生成器

时间:2015-07-18 12:15:40

标签: java parsing antlr parser-generator

我使用 antlr 生成java解析器,但生成的代码引用了antlr库。

// Generated from Sentences.g by ANTLR. Needs the JAR... How to avoid this?
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
...

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class SentencesParser extends Parser {
    static { RuntimeMetaData.checkVersion("4.5.1", RuntimeMetaData.VERSION); }
...

是否有替代方案可以生成独立的Java代码? (或者有没有办法让生成的代码独立)

2 个答案:

答案 0 :(得分:0)

你可以通过手工编写递归下降解析器来避免引入任何其他依赖(你最终可能会介绍一些你自己的,但这完全取决于你)。

请参阅我的SO答案,了解如何构建递归下降解析器:https://stackoverflow.com/a/2336769/120163

答案 1 :(得分:0)

如前所述,最简单的方法是如果您的语法没有左递归并且没有歧义,则可以手动编写递归下降解析器。顺便说一下,通过左递归消除和左因子分解,许多语法可以转换为LL(k)甚至LL(1)语法。自底向上解析器由于其移位/减少行为而难以手工构建。

如果您正在寻找可生成独立Java解析器的工具,请查看我最近正在研究的top-down non-recursive parser generation tool。 Java世界中一种流行的工具是javacc-但它会生成递归下降解析器。