66得票1回答
使用监听器在ANTLR中实现if/else语句

我正在为学校项目创建一个简单的编程语言。我使用ANTLR 4从我的语法中生成词法分析器和解析器。 我一直在使用ANTLR的监听器模式来应用程序语言的实际功能。 现在我想要实现if/else语句,但我不确定在使用监听器模式时是否可以实现这些语句,因为ANTLR在使用监听器时决定遍历解析树的顺序...

7得票6回答
ANTLR 4.4中Java语法的访问者方法不起作用。

我是一个新手,对ANTLR框架不太熟悉。我围绕着这个问题工作了一个星期。现在我处于一种需要解析Java文件并提取数据的情况。我正在使用ANTLR 4进行解析。我使用ANTLR内置工具创建了Lexer、Parser和Visitor文件。当我尝试覆盖Visitor方法时,它没有被调用,并返回了nu...

18得票5回答
使用Gradle生成带有包声明的ANTLR4语法文件

我尝试使用Gradle Antlr插件,但遇到了一些问题。 我有一个名为wls.g4的语法文件:grammar WlsScript; @header { package hu.pmi.wls.antlr.ws; } program : 'statementList'? EOF...

11得票4回答
ANTLR4和Python目标

我在使用ANTLR4的Python目标时遇到了问题。似乎很少有可用的示例,并且查看相应的Java代码似乎不相关。 我正在使用标准的Hello.g4语法: // Define a grammar called Hello grammar Hello; r : 'hello' ID ; ...

11得票1回答
Antlr解析器的操作符优先级

考虑以下文法。我对运算符优先级有问题,例如: res=2*a+b 与 res=2*(a+b) 的解析树类似。我知道问题出在哪里,但没有不涉及相互左递归的“漂亮”解决方案浮现在我的脑海中。你能否帮我一下?该文法与自定义访问者一起使用。 grammar Math; expression: ex...

47得票3回答
在 IntelliJ 中的 ANTLR 插件中,启动规则为从导航器或语法中选择。

我在IntelliJ中创建了一个简单的语法文件,但是无法看到Antlr插件的任何效果。当我在ANTLR预览中打开文件时,它会显示:start rule: <select from navigator or grammar> 什么是起始规则?如何从导航器中选择它?如何从语法中选择它?

8得票1回答
ANTLR4解析器重用和预热

在我的使用案例中,我必须使用访问者(Visitor)在生成的解析树上将数千个小型和独立表达式解析成树形表示。目前每次解析操作都会创建新的流、词法分析器和解析器实例。 我认为这可能不是最优的做法。在这种设置下,哪些对象实例可以被重复利用以利用ANTLR4的预热属性?线程安全如何 - 这些实例中...

7得票2回答
ANTLR 4 - 警告:规则包含一个可选块,其中至少有一个替代方案可以匹配空字符串。

我使用antlr v4编写T-SQL解析器。 "规则'sqlCommit'包含一个可选块,其中至少有一个可以匹配空字符串的替代方案" 我的代码: sqlCommit: COMMIT (TRAN | TRANSACTION | WORK)? id?; id: ID | CREATE |...

11得票1回答
非关联运算符(例如“<”)如何在ANTLR4语法中指定?

在规则expr : expr '&lt;' expr | ...;中,ANTLR解析器将接受类似 1 &lt; 2 &lt; 3 的表达式(并构造左相关的树状结构对应括号 (1 &lt; 2) &lt; 3)。 您可以告诉ANTLR将运算符视为右相关性,例如:expr : expr '&lt...

7得票1回答
如何在ANTLR 4中跳过解析规则?

在词法分析器中,可以跳过标记,使它们不进入解析器,如下所示: Whitespace : [ \t\r\n]+ -&gt; skip ; 对于解析器,是否有类似于-&gt; skip的等效选项?也就是说,一旦匹配了解析器规则,是否有办法将其排除在解析树之外?假设可能看起来像这样: doc...