2013-03-14 61 views
0

我正在通过自定义语法处理我的输入文件并提取令牌并将它们返回到HashMap中。在ANTLR 3中,我能够通过在解析器上调用rule()方法并获得HashMap类似于parser.record的东西来解析文件。在ANTLR4中从解析器访问解析的数据

这似乎并不适用于ANTLR 4.我提到这本书,看起来我必须拨打parser.init()才能开始解析,但在解析器中看不到任何方法。

我使用ANTLRWorks 2来生成我的词法分析器和分析器文件。我没有生成监听器类。

回答

5

在ANTLR 4中,您通过调用匹配条目规则名称的方法开始分析。如果语法中的规则被称为rule,则可以通过调用rule()开始解析。如果语法中的规则被称为init,那么您将通过调用init()开始解析。

请注意,ANTLR 4中的Java目标不允许你有一个叫做rule的规则,所以如果你的语法中有这样一条规则,你需要在语法编译之前重新命名它。

+0

感谢帮助。我正在处理另一个问题。从我的语法中找到一个片段。正如你所看到的,我将这些值保存在一个HashMap中。我的文件正在被正确解析,但我无法访问该HashMap后解析。在ANTLR 3中,它就像parser.metadata一样简单。记录: {Map metadata = new HashMap (); } 头1 WORD * COLD_JOB WORD + DOCTYPE {metadata.put( “DOCTYPE”,$ doctype.text);} HEADER2 '交易提交:' 日期时间 'CSR名称:' 字+ 数字 '客户ID:' CUSTOMER_NUMBER {metadata.put( “thriventId”,$ customer_number.text);} – javadmirer 2013-03-15 16:05:09