如何使用antlr生成的解析器和词法分析器?

时间:2014-10-19 14:42:35

标签: java antlr

我创建了antlr4语法文件“Jay.g4”并生成了我编译为“JayLexer.class”和“JayParser.class”的“JayLexer.java”和“JayParser.java”。 问题是:如何使用java生成的源代码?我使用NetBeans IDE,我不知道如何将词法分析器和解析器集成到我的项目中并使它们正常工作。

1 个答案:

答案 0 :(得分:5)

如果您想进一步冒险,我建议The Definitive Antlr 4 Reference。从Antlr documentation,您可以下载/查看一些示例代码,包括:

final LexerGrammar lg = (LexerGrammar) Grammar.load(lexerGrammarFileName);
final Grammar pg = Grammar.load(parserGrammarFileName, lg);
ANTLRFileStream input = new ANTLRFileStream(fileNameToParse);
LexerInterpreter lexEngine = lg.createLexerInterpreter(input);
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
ParserInterpreter parser = pg.createParserInterpreter(tokens);
ParseTree t = parser.parse(pg.getRule(startRule).index);
System.out.println("parse tree: " + t.toStringTree(parser));

但是,如果你有课程JayLexerJayParser,你宁可写下这样的内容:

ANTLRFileStream input = new ANTLRFileStream(fileName); // a character stream
JayLexer lex = new JayLexer(input); // transforms characters into tokens
CommonTokenStream tokens = new CommonTokenStream(lex); // a token stream
JayParser parser = new JayParser(tokens); // transforms tokens into parse trees
ParseTree t = parser.your_first_rule_name(); // creates the parse tree from the called rule

然后根据需要使用解析树,例如实现JayBaseListenerJayBaseVisitor的类。查看其中一个给定链接以获取更多信息。