Tag: antlr

从* .dot文件中可视化树

我需要通过捕获ANLR点生成器生成的控制台输出来可视化我从ANTLR解析器获取的树并写入.dot文件。 MyDOTTreeGenerator generator = new MyDOTTreeGenerator(); PrintStream old = System.out; try { System.setOut(new PrintStream(new FileOutputStream(graphFile))); } catch (FileNotFoundException e) { e.printStackTrace(); } System.out.println(generator.toDOT(root)); System.out.flush(); System.setOut(old); 问题是: 1.有没有办法可视化我的程序中的.dot文件,例如Swing组件。 2.我已经阅读/尝试使用Grappa库+ Graphviz工具包使用这种方法进行可视化=>有没有一种方法可以将Graphviz工具包打包到我的程序中,这样我就可以在没有最终用户的情况下可视化图形下载和/或安装一些东西。

java.lang.ClassNotFoundException:antlr.ANTLRException

我有一个方法来获得表的第一个结果。 public T LoadFirstData() { T object = null; try { startOperation(); Query query = session.createQuery(“from ” + type.getName()); object = (T) query.list().get(0); } catch (HibernateException e) { HandleException(e); } finally { HibernateUtil.Close(session); } return object; } 但是,当我运行该方法时,我有例外 Exception in thread “main” java.lang.NoClassDefFoundError: antlr/ANTLRException at org.hibernate.hql.ast.ASTQueryTranslatorFactory.createQueryTranslator(ASTQueryTranslatorFactory.java:58) at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:98) at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) at […]

捕获ANTLR中的错误并找到父级

我发现在解析期间我可以通过覆盖displayRecognitionError来捕获错误,但是如何找到此错误的父“节点”? 恩。 如果我有语法:prog:stat expr; stat:STRING; expr:INTEGER; 并给它输入“abc def”。 然后我将在“def”处得到一个错误,它应该是一个整数。 此时我想获得“expr”的父级(因为它在INTEGER部分内失败)并且它是父级“prog”。 有点像在java中打印堆栈跟踪。 我试图从IdentificationException中查找解析为displayRecognitionError的节点,但它是null,并且使用CommonErrorNode时父节点为null。 我应该采取完全不同的方法吗?

ANTLR java测试文件无法创建树语法对象

我正在使用针对java的ANTLR 3.x创建一个解析器。 我编写了解析器语法(用于创建抽象语法树,AST)和树语法(用于在AST上执行操作)。 最后,为了测试两个语法文件,我用Java编写了一个测试文件。 看看下面的代码, 协议语法 grammar protocol; options { language = Java; output = AST; } tokens{ //imaginary tokens PROT; INITIALP; PROC; TRANSITIONS; } @header { import twoprocess.Configuration; package com.javadude.antlr3.x.tutorial; } @lexer::header { package com.javadude.antlr3.x.tutorial; } /* parser rules, in lowercase letters */ program : declaration+ ; declaration :protocol |initialprocess |process |transitions ; protocol […]

使用antlr解析特定函数中的lua IF语句

我在java中使用带有antlr的Lua.g语法生成了一个Lua Parser。 我希望解析的我的lua代码基本上是这样的 function uniqueid_some_event (e) if (e:HasString(“string1”)) then — do something end if (e:HasString(“string2”)) then — do something end end 我在不同的文件中有数百个这些事件用于特定的actor绑定。 现在我想解析这些文件并收集每个检查的条件 – 在上面的例子中 – 我想提取“string1”和“string2”作为事件触发器。 (更确切地说,我想创建一个只显示每个文件的触发器的报告) 我收集我需要以某种方式修改Lua.g以在那里添加我自己的逻辑但我失去了因为我没有找到任何关于此的文档 – 我看了LuaEclise基本上做了一些事情,但它对我也不起作用。 那么 – 是否可以向生成的LuaParser添加某种w3c DOM返回值? 或者像getFunctions()这样的东西返回找到的所有函数,并在每个函数getHasStringStatements()中返回条件?

如何阻止ANTLR抑制语法错误?

所以我用Java编写了一个使用ANTLR的编译器,我对它如何处理错误感到有些困惑。 默认行为似乎是打印错误消息,然后通过令牌插入等方式尝试从错误中恢复并继续解析。 我原则上喜欢这个; 这意味着(在最好的情况下)如果用户提交了多个语法错误,他们将在每个错误中获得一条消息,但它会提到所有错误,而不是强制它们重新编译以发现下一个错误。 默认错误消息可以用于我的目的。 当它读完所有令牌时就会出现问题。 当然,我使用ANTLR的树构造函数来构建抽象语法树。 虽然解析继续通过语法错误很好,所以用户可以看到所有错误,一旦完成解析我想得到一个exception或某种指示输入在语法上没有效果; 这样我就可以停止编译并告诉用户“抱歉,修复语法错误,然后重试”。 我不想要的是它根据它认为用户试图说的内容吐出一个不完整的AST,并继续编译的下一个阶段,没有任何迹象表明出现任何问题(除了错误信息之外)到控制台,我看不到)。 但默认情况下,确实如此。 最终的ANTLR参考提供了一种在检测到语法错误时立即停止解析的技术:覆盖mismatch和recoverFromMismatchedSet方法以抛出RecognitionException ,并添加@rulecatch操作来执行相同操作。 这似乎失去了从解析错误中恢复的好处,但更重要的是,它只能部分工作。 如果缺少必要的标记(例如,如果二元运算符只在其一侧有一个表达式),它会按预期抛出exception,但如果添加了一个无关的标记,ANTLR会插入它认为属于的标记并继续以其快乐的方式,生成一个AST,除了控制台消息外没有任何语法错误的迹象。 (更糟糕的是,它插入的令牌是EOF ,所以文件的其余部分甚至都没有被解析。) 我确定我可以解决这个问题,例如,向解析器添加类似isValid字段的内容并覆盖方法并添加操作,以便在解析结束时,如果出现任何错误,它会抛出exception。 但有更好的方法吗? 我无法想象我想要做的事情在ANTLR用户中是不寻常的。

使用antlr3的简单标准表达式解析器

我想用antlr3创建一个简单的条件表达式解析器 更新:单独的AND OR表达式规则以支持AND / OR不同的层次结构,但还有另一个问题:如果表达式类似于:a = 1且b = 2且c = 3根据当前工具,树应如下: = = (a = 1)(b = 2)(c = 3) But I want to generate it as follows: = = (a = 1)(b = 2) (c = 3) First “and” should be higher priority than another, because I want to parse all the expression as […]

ANTLR API问题; 示例+解决方法提供; 需要解释

我使用ANTLRWorks创建了以下Lexer。 (另见http://bkiers.blogspot.com/2011/03/2-introduction-to-antlr.html#intro ) // CSVLexer.g lexer grammar CSVLexer; @lexer::header { package graphica.parsers; } Comma : ‘,’ ; LineBreak : ‘\r’? ‘\n’ | ‘\r’ ; SimpleValue : ~(‘,’ | ‘\r’ | ‘\n’ | ‘”‘)+ ; QuotedValue : ‘”‘ (‘””‘ | ~'”‘)* ‘”‘ ; 我使用以下Java类来测试Lexer。 /** * * @author Nilo */ import org.antlr.runtime.*; public class CSVLexerTest { […]

ANTLR – NoViableAltException

我正在尝试通过编写一个语法来学习ANTLR(我正在使用带有ANTLR插件的eclipse),直到我遇到错误它才会好起来: NoViableAltException: line 0:-1 no viable alternative at input ” 当我尝试测试我的args解析器规则时; typedident : (INT|CHAR) IDENT; args : (typedident ( COMMA typedident)*)?; 一个字母是一个字母后跟任何字符,这是有效的,我已经测试过了。 typedident也适用于测试。 我正在使用int a12q2efwe, char a12eqdsf的输入int a12q2efwe, char a12eqdsf (完全随机)并且树在解释器中看起来很好,唯一的问题是args有四个分支而不是3,typedident,逗号,typedident然后错误在最后一。 任何帮助将不胜感激。 谢谢。

为什么我的ANTLR构建Ant任务失败并且“无法确定生成的类”?

我正在尝试为Ant使用ANTLR3任务 ,但是我得到了“无法确定生成的类”构建失败消息。 一项快速研究表明,许多人遇到了同样的问题,没有提供解决方案(见下面的链接)。 有人可以提出一个不使用常规Java Ant任务的解决方案吗? 外部链接: http://www.antlr.org/pipermail/antlr-interest/2009-November/036795.html http://www.antlr.org/pipermail/antlr-interest/2006-July/016870.html http://palove.kadeco.sk/itblog/posts/40