当前位置: 首页 > 知识库问答 >
问题:

从ANTLR4中的解析器访问解析数据

孔波
2023-03-14

我正在通过自定义语法处理输入文件,提取标记,并在HashMap中返回它们。在ANTLR 3中,我能够通过调用解析器上的rule()方法来解析文件,并获得HashMap类似于解析器的内容。记录

这在ANTLR 4中似乎不起作用。我参考了这本书,似乎我必须调用解析器。init()开始解析,但我在解析器中没有看到任何方法。

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

共有1个答案

拓拔耀
2023-03-14

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

请注意,ANTLR 4中的Java目标不允许有名为rule的规则,因此,如果语法中有这样的规则,则需要在编译语法之前对其进行重命名。

 类似资料:
  • 我对ANTLR相对来说是新的,所以请原谅我。 但是当我试图解析下面的表达式时 我最终出现以下错误: 第1:38行:'''处的令牌识别错误 第1:42行:'''处的令牌识别错误 规则r没有方法或者它有参数 规则'r'的意思是什么?我怎么能理解问题的原因呢?任何帮助都将不胜感激!

  • 在ANTLR4中,我有一个lexer规则,说我可以使用任何字符得到任何单词,但空格和换行符除外。其定义如下: 我还有一个lexer规则(定义在than WORD之前),用于进入EVAL模式: 我考虑的另一个选择是将“word”定义为${and}包围的文本以外的任何东西。但我不知道如何创建这样的lexer规则。 我该怎么解决?要区分评价和词?

  • 我对是否允许以下情况感到困惑: UPDATE:我知道当我在for循环中提供正确的声明类型时,它就会工作。问题是如果我不这样做会发生什么?

  • 我所开发的ANTR4语法。在解析字符串期间 时间;25 10 * * *;' faccalc_minus1_cron.out.'yyyyMMdd。嗯;美国/New_York 我有以下错误 表达式中的字符无效!表达式:;'无效字符:;'无关输入“;”应为{“”,整数,“-”,“/”,“,”},缺少“;”“\uu”处的时区格式不正确:faccalc\u minus1 我不理解为什么,因为正则表达式规则

  • 我有一个语法,当解析在一次传递(整个文件)很好。 现在我希望将解析分解成组件。并在子库上运行解析器。我遇到了一个问题,我假设其他解析子库的人会看到下面的规则: 当上面的规则从一个顶级的开始规则解析到EOF时,一切都很好。当解析为子规则(而不是解析为EOF)时,解析器在没有thing子句时会感到不安,因为它希望看到“,”字符或EOF字符。 第8行:0不匹配的输入“%”应为{,“,”} 当我解析到EO

  • 我试图以C#为目标,使用Antlr4解析一个日期。在我的情况下,有效日期应具有以下内容 采用格式 年份只能有4位数字 月和日只能有2位 我知道类似的问题已经出现了,但它们的解决方案似乎对我不起作用 如何创建将解析日期的antlr4语法 ANTLR:识别日期和数字的最简单方法? 我在某个地方读到过,有一种类似优先级的解析,其中基于语法文件如何编写的顶级规则首先被评估。因此,考虑一下,除了日期,我的语