草庐IT

java - 处理 ANTLR4 中的错误

解析器不知道该做什么时的默认行为是将消息打印到终端,例如:line1:23missingDECIMALat'}'这是一条好消息,但发错了地方。我宁愿将其视为异常(exception)。我尝试使用BailErrorStrategy,但这会引发ParseCancellationException没有消息(由InputMismatchException引起,也没有消息)。有没有办法让它通过异常报告错误,同时保留消息中的有用信息?这就是我真正追求的——我通常在规则中使用Action来构建一个对象:dataspecreturns[DataExtractorextractor]@init{Data

java - 让 ANTLR 生成脚本解释器?

假设我有以下所有打包为blocks.jar的JavaAPI:publicclassBlock{privateStingname;privateintxCoord;privateintyCoord;//Getters,setters,ctors,etc.publicvoidsetCoords(intx,inty){setXCoord(x);setYCoord(y);}}publicBlockController{publicstaticmoveBlock(Blockblock,intnewXCoord,intnewYCoord){block.setCooords(newXCoord,ne

java - IntelliJ IDEA Gradle 项目无法识别/定位 Antlr 生成的源

我在一个简单的Kotlin/Gradle项目中使用Antlr,当我的Gradle构建生成Antlr源时,它们无法导入到项目中。如您所见(在左侧),正在生成类(Lexer/Parser等)。我还将这个generated-src/antlr/main目录配置为SourceRoot。我看到的大多数问题都将此列为解决方案,但我已经做到了。在多次重建(在IDEA和CLI中)以及所有常见的“使缓存无效并重新启动”问题之后,该问题仍然存在。此外,导入问题已在CLI上的Gradle构建中列出,因此它似乎与IDEA无关。我在这里错过了什么?这是我最初创建项目时IDEA生成的build.gradle文件,

c++ - ANTLR 解析器生成器是否最适合内存受限的 C++ 应用程序?

我正在寻找一个好的解析器生成器,我可以用它来读取我们大型商业应用程序中的自定义文本文件格式。目前,这种特殊的文件格式是用手工制作的递归解析器读取的,但这种格式已经变得越来越复杂,以至于这种方法变得难以管理。似乎最终的解决方案是为这种格式构建一个合适的语法,然后使用像yacc这样的真正的解析器生成器来读取它,但我无法决定使用哪个这样的生成器,即使它们是值得麻烦。我看过ANTLR和Spirit,但我们的项目有超出earlieranswers的特定限制。这让我想知道它们是否适合我们。特别是,我需要:使用MSVC生成C或C++代码的解析器。ANTLR3不支持C++;它声称可以直接生成C,但有关

c++ - ANTLR 3.2 中的 C++ 代码生成准备好了吗?

我一直在努力让ANTLR3.2在C++中生成解析器/词法分析器。这是徒劳的。不过,使用Java和C时一切顺利。我使用本教程开始:http://www.ibm.com/developerworks/aix/library/au-c_plusplus_antlr/index.html当我检查*.stg文件时,我发现:CPP只有./tool/src/main/resources/org/antlr/codegen/templates/CPP/CPP.stgC有这么多文件:./tool/src/main/resources/org/antlr/codegen/templates/C/AST.s

c++ - 使用 Bison/Antlr/Packrat/Elkhound/编写的 LLVM JIT 解析器

在LLVMtutorials有如何编写简单的JIT编译器的说明。不幸的是,本教程中的词法分析器和解析器是手动编写的。我在想,这样的解决方案适合学习目的,但不适合编写复杂的、生产就绪的编译器。似乎GCC和其他一些“大编译器”是手写的。但我认为,所有这些解析器生成器在编写自己的编译器时都提供了很大的插入力(尤其是当您独自完成时,没有团队)。是否可以将任何现有的解析器生成器(如Bison/Antlr/Packrat/Elkhound等)与LLVM一起使用来创建JIT编译器?我希望能够不断地(不是一开始就)用表达式“喂养”解析器,并在运行时编译它们。另外,我发现了很多关于“最好的、现代的”解析

c++ - 是否有适用于 ANTLR 的 C++ 语法文件?

是否有任何现有的ANTLRC++语法文件?我正在寻找lex,而不是解析一些C++源代码文件。我查看了ANTLRgrammarpage看起来有一个由SunMicrosystems创建的列表here.不过,它似乎是一个生成的Parser。谁能给我指出C++ANTLR词法分析器或语法文件? 最佳答案 C++解析器很难构建。我无法谈论使用ANTLR的C++语法的经验。HereIdiscuss我通过阅读附在我在ANTLR网站上看到的注释所学到的东西;本质上,作者产生了一个不完整的语法。那只是针对C++98的。我已经有一段时间没看过了;可能还有

java - ANTLR 类转换异常

为什么在ANTLR中生成代码时会出现此错误?[16:06:38]error(10):internalerror:C:\Users\user\Desktop\test.g:java.lang.ClassCastException:org.antlr.runtime.tree.CommonTreecannotbecasttoorg.antlr.tool.GrammarASTorg.antlr.grammar.v3.CodeGenTreeWalker.rules(CodeGenTreeWalker.java:1467)org.antlr.grammar.v3.CodeGenTreeWalke

java - 扩展简单的 ANTLR 语法以支持输入变量

我还在myquestforareallysimplelanguage我现在知道没有了。所以我正在用ANTLR3自己写一个。我在thisanswer中找到了一个非常好的例子:Exp.g:grammarExp;evalreturns[doublevalue]:exp=additionExp{$value=$exp.value;};additionExpreturns[doublevalue]:m1=multiplyExp{$value=$m1.value;}('+'m2=multiplyExp{$value+=$m2.value;}|'-'m2=multiplyExp{$value-=$m

java - 获取所有 Antlr 解析错误作为字符串列表

如何在字符串列表中获取Antlr的所有解析错误?我使用antlr如下:ANTLRInputStreaminput=newANTLRInputStream(System.in);grLexerlexer=newgrLexer(input);CommonTokenStreamtokens=newCommonTokenStream(lexer);grParserparser=newgrParser(tokens);ParseTreetree=parser.formula();System.out.println(tree.toStringTree(parser));例如line1:0toke