首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ANTLR生成的解析器和词法分析器?

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

Stack Overflow用户
提问于 2014-10-19 22:42:35
回答 1查看 4.2K关注 0票数 3

我创建了antlr4语法文件Jay.g4,并生成了JayLexer.javaJayParser.java。我编译了这些代码来创建JayLexer.classJayParser.class

我的问题是:如何在Java中使用这些生成的源代码?我使用的是NetBeans集成开发环境,但我不知道如何将词法分析器和解析器集成到我的项目中,并使它们正常工作。

EN

回答 1

Stack Overflow用户

发布于 2014-10-19 23:02:35

如果你想进一步尝试,我推荐The Definitive Antlr 4 Reference。您可以从Antlr documentation下载/查看一些示例代码,其中包括:

代码语言:javascript
复制
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类,则更愿意编写如下内容:

代码语言:javascript
复制
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的类。有关更多信息,请查看其中一个给定的链接。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26451636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档