jjzjj

java - 使用 ANTLR v3 编译 Java 源代码时出现问题

我正在尝试从命令行运行ANTLRC语法文件(DummyC.g)来解析C源文件和头文件(a.h)。当我使用antlr.jar文件运行它时,它会生成解析器和词法分析器文件。但是当我编译测试文件Main.java时。它给出了缺少ANTLR包的错误,如下所示。C:\antlr-2.7.6\test>javacMain.javaMain.java:1:packageorg.antlr.tooldoesnotexistimportorg.antlr.tool.;^Main.java:2:packageorg.antlr.runtimedoesnotexistimportorg.antlr.runt

java - 如何在ANTLR4中实现错误处理

我有以下语法来解析应用于图形的一阶逻辑公式:grammarGraph;/*------------------------------------------------------------------*PARSERRULES*------------------------------------------------------------------*/input:formulaEOF;formula:TRUE|FALSE|formulaANDformula|formulaORformula|quantifierformula|STcondition;condition:a

java - 理解 ANTLR 中的树

我正在尝试将Antlr用于一些类似文本IDE的功能——特别是解析文件以识别代码折叠点和应用语法高亮显示。第一个问题——Antlr是否适合这个需求,或者它是否矫枉过正?这可以使用正则表达式和/或手动解析器来实现...但似乎Antlr可以为我完成这项工作。我浏览了...和优秀的教程资源here.我已经设法构建了一个Java语法(使用standardgrammar),并将所有内容整齐地解析为一棵树。但是,我希望看到嵌套在树中的元素。事实上,一切都是最顶层元素的子元素。例如。鉴于:packagecom.examplepublicclassFoo{StringmyString="HelloWor

java - 如何简化 token 预测 DFA?

词法分析器DFA导致“代码太大”错误我正在尝试使用ANTLR3解析Java服务器页面。Java对单个方法的字节码有64k的限制,我在编译ANTLR生成的Java源代码时一直遇到“codetoolarge”的错误。在某些情况下,我已经能够通过破坏我的词法分析器来修复它。例如,JSP使用XML“名称”标记,它可以包含多种字符。我决定在我的“名称”token中只接受ASCII字符,这极大地简化了一些测试,词法分析器允许它编译。然而,我已经到了无法再偷工减料的地步,但DFA仍然太复杂。我该怎么办?是否存在导致复杂DFA的常见错误?有没有办法抑制DFA的生成,也许是依靠语义谓词或固定前瞻来帮助预

java - Antlr4 - 是否有使用 ParseTree Walker 的简单示例?

Antlr4有一个新类ParseTreeWalker。但是我该如何使用它呢?我正在寻找一个最小的工作示例。我的语法文件是'gram.g4',我想解析一个文件'program.txt'到目前为止,这是我的代码。(假设ANTLR已经运行了我的语法文件并创建了所有的gramBaseListener、gramLexer等等):importorg.antlr.v4.runtime.*;importorg.antlr.v4.runtime.tree.*;importstaticorg.antlr.v4.runtime.CharStreams.fromFileName;publicclasslaun

javascript - Antlr4 Javascript 访客

我目前正在尝试在Antlr4Visitor的帮助下开发一个JavaScript编译器。我已经用Java实现了这个,但无法弄清楚如何在JavaScript中执行此操作。也许有人可以回答我几个问题?1:在Java中有一个Visitor.visit函数。如果我是对的,这对于Javascript是不可能的。有解决办法吗?2:我的JavascriptVisitor获得了所有生成的访问函数,但是当我使用console.log(ctx)时,上下文未定义。知道为什么吗?从SimpleVisitor.js中提取://VisitaparsetreeproducedbySimpleParser#parse.

java - ANTLR @header、@parser、superClass 选项和基本文件 io (Java)

我想对基本文件io(Java)使用解析器操作,例如。G。ANTLR语法中的PrintWriter。我必须使用superClass选项还是可以使用@header?在这两种情况下,我如何声明PrintWriter对象以及我必须如何处理异常? 最佳答案 选项superClass=...用于让您的Parser扩展自定义类。所以,我认为这不是您想要的。@header部分中的所有内容都将放在Parser类的开头。这用于导入类:@header{importjava.io.PrintWriter;}请注意,@header{...}是@parser:

java - JavaCC 与 ANTLR 的优势是什么

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。太多人告诉我缺点,但如果有的话,它的优点是什么?

java - 是否有任何使用 ANTLR 或类似语言实现的简单语言?

我正在尝试构建一种用于学习目的的简单解释型语言。我已经阅读了无数关于ANTLR和JavaCC的理论和教程,但我不知道如何真正让它做一些有用的事情。我通过“拆开一些东西然后重新组合起来”学习得最好,那么,是否有任何在ANTLR或类似工具的帮助下实现的简单语言的工作示例?像下面这样的东西可能不错:x=1ifx==1print"true" 最佳答案 [不要脸的外挂]为什么不买我的LanguageImplementationPatterns书?我有你需要的所有部件来组合一种语言,包括多个解释器等......

java - ANTLR:空格缩进?

我想创建一个带有空格缩进的非常简单的语法。每行由1个或多个单词组成,但像python一样缩进(4个空格或制表符是一个缩进)并且缩进没有关闭,例如:ifsomethingcooloccursdothiselseotherwisedothislooparoundsomethingeachtimedoingthisanddothatsaygoodbyte不是阅读每一行,而是计算缩进并手动构建树是否可以在ANTLR语法中完成所有这些工作?我的目标语言是Java。 最佳答案 这是可能的。您所做的就是定义一个规则并让它被跳过。给你:Ignore