我正在尝试编写一个AST解释器/REPL。ANTLRv4提供了两个非常相似的接口(interface)(ParseTreeVisitor和ParseTreeListener)来遍历解析树。我似乎找不到它们之间的任何主要区别,而且文档相当稀疏。一种界面优于另一种界面吗? 最佳答案 接口(interface)用于不同的目的。主要区别如下:解析树监听器在检查解析树节点的子节点之前/之后为单独提供进入/退出方法。所有方法都返回void。监听器为“返回”收集的任何值都必须保存在字段中或其他地方。控制检查哪些树节点是外部(通过ParseTree
我是Antlr的新手,但之前使用过Flex/Bison。我想知道我想用Antlr做的事情是否可行。我想使用Antlr解析PDDL文件,并在我编写的Java类中构建我自己的PDDL文件内容表示,该类是我在解析PDDL文件时编写的(在规则的操作中?)。文件解析完成后,我想将文件内容的对象表示返回给Java程序以运行其他操作。所以基本上,我想从Java程序内部对PDDL文件调用Antler生成的PDDL解析器,并让它向主Java程序返回一个描述PDDL文件的对象。这可能吗?我曾尝试查看文档,但没有找到好的答案。非常感谢。 最佳答案 Soe
因此,我一直在使用ANTLRv3.4在Eclipse中制作语法,并且制作了一个可以使用的语法,并且我想确保在编辑它时一切仍然有效。我每次都可以进入口译员,但这似乎是在浪费时间。问题:我读过有关gunit的内容,但它提供了下载gUnit的链接:(http://antlr.org/hudson/job/gUnit/org.antlr$gunit/lastSuccessfulBuild/)不起作用。我怎样才能得到gUnit。测试语法的最佳方法是什么?它实际上是gUnit还是我应该像jUnit测试那样做java测试? 最佳答案 这个问题很老
这应该相当简单。我正在使用ANTLR研究词法分析器语法,并希望将变量标识符的最大长度限制为30个字符。我试图用这一行来完成这个(遵循正常的正则表达式-除了''东西-语法):ID:('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_'){0,29}{System.out.println("IDENTIFIERFOUND.");};代码生成没有错误,但由于生成的代码中有一行代码导致编译失败:0,29显然antlr正在获取括号之间的文本部分并将其与打印行一起放置在接受状态区域中。我搜索了ANTLR站点,但没有找到等效表达式的示例或引用。这个表达式
当尝试使用生成的语法和词法分析器时,我得到:org.antlr.v4.runtime.atn.ATN;CouldnotdeserializeATNwithversion2(expected3).怎么了? 最佳答案 你的解析器是用ANTLR4.0生成的,但你正试图用ANTLR4.1来执行它。最可能的原因是使用ANTLRWorks2.0生成解析器,它在内部使用ANTLR4.0。我正在发布ANTLRWorks2.1,它将纠正这种不匹配。 关于java-antlr4:ATN版本2预计3,我们在S
我正在从事一个小型文本编辑器项目,并希望为几种语言(Java、XML..仅举几例)添加基本语法突出显示。作为一种学习体验,我想添加一个流行的或不流行的Java词法分析器。您推荐什么项目。Antlr可能是最著名的,但它看起来相当复杂和沉重。这是我所知道的选项。AntRagel(是的,它可以生成用于处理输入的Java源代码)自己动手(我想我可以编写一个简单的token解析器并突出显示源代码)。 最佳答案 ANTLR或JavaCC是我所知道的两个。我首先推荐ANTLR。 关于java-哪个面向
我正在尝试从此处编译ISO-SQL2003语法http://www.antlr3.org/grammar/1304304798093/SQL2003_Grammar.zip.它的所有三个版本都可以在这里找到http://www.antlr3.org/grammar/list.html.这些是我遵循的步骤,java-jarantlr-3.3-complete.jar-Xmx8G-Xwatchconversionsql2003Lexer.gjava-jarantlr-3.3-complete.jar-Xmx8G-Xwatchconversionsql2003Parser.gjavacANT
ANTLR从语法文件生成java源代码。生成的源代码依赖于ANTLR类。我可以使用ANTLR生成没有任何antlr依赖项的“干净”java源代码吗?如果没有,有人可以推荐一些性能出色并且可以生成干净的java代码的java解析器吗? 最佳答案 删除对ANTLR的运行时依赖性确实不切实际。您需要随识别器一起分发ANTLR运行时库。如果我没记错的话,JavaCC创建必要的运行时类(JavaCC“样板”)的副本作为“生成”代码的一部分,这样您就不需要包含额外的JAR。您担心ANTLR依赖项的根源是什么?
在我当前的项目中,我编写了高级规范(如下所示以供引用)并使用用ANTLR编写的语法对其进行解析,然后使用StringTempate生成等效的Java编程代码。现在,我的客户发现编写此文本高级规范很困难,并希望我提供等效的可视化拖放编程结构和编辑器来指定此编程结构。我的问题是:eclipse是否提供任何拖放工作台以开发可视化编程结构和编辑器?它可能很容易与ANTLR集成。示例或其链接将很有用。TemperatureSensorgeneratetempMeasurement:TempStruct;TempStructtempValue:double;unitOfMeasurement:St
我有这个简单的语法:expr:factor;factor:atom(('*'^|'/'^)atom)*;atom:INT|':'expr;INT:('0'..'9')+当我运行它时它说:Decision可以使用多个备选方案1,2来匹配诸如'*'之类的输入Decision可以使用多个备选方案1,2来匹配诸如'/'之类的输入我无法发现歧义。红色箭头是怎么指的?任何帮助将不胜感激。 最佳答案 假设您要解析输入::3*4*:5*6由您的语法生成的解析器可以将此输入匹配到以下解析树中:和:(我省略了冒号以使树更清晰)请注意,您看到的只是一个警