我正在使用GWT-RPC调用ANTLR语法。如果语法失败,我将创建一个包含该语法引发的错误/异常的对象,并将其返回给客户端。 当我这样做时,我得到一个例外: com.google.gwt.user.client.rpc.SerializationException: Type 'org.antlr.runtime.NoViableAltException' was not included in the set of types which can be serialized by this Serializati…

2020年11月22日 0条评论 23点热度 阅读全文

我正在尝试运行ParSeMiS。根据文档,它需要ant,prefuse和antlr jar在其lib目录中可用。我已经把所有需要的罐子放进去了。但是,当我尝试运行它时,出现以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: antlr/TokenStreamException at de.parsemis.miner.environment.Settings.parseFileName(Settings.java:198) at de.p…

2020年10月12日 0条评论 29点热度 阅读全文

使用cmd进行编译:javac Test.java。但是编译失败,并说找不到符号parser.prog()。有任何想法吗? import org.antlr.runtime.*; public class TestT { public static void main(String[] args) throws Exception { // Create an TLexer that feeds from that stream //TLexer lexer = new TLexer(new ANTLRInputS…

2020年9月29日 0条评论 14点热度 阅读全文

我正在尝试编写一个输出Java方法的ANTLR语法。即我为以下公式编写了语法: expr("L") + expr("R") 我希望我的语法翻译器在翻译后像下面这样用下面的方法返回一个Java类: public class FormulaExecutor(){ public Double formula1234(FormulaAPI apiReference) { return apiReference.evaluateResult("L") + apiReference.evaluateResult("R") ; …

2020年9月20日 0条评论 16点热度 阅读全文

在Antlr3中,我有以下语法: ruleA: (ruleBStart) => ruleB | ruleC ; 为了简单起见,我们假设ruleB是SQL中SELECT语句的语法,但是可以嵌套在任意数量的LPAREN中。简单地说,这很容易用旧语法表示: ruleBStart: (LPAREN)* SELECT ; 在Antlr4中,如果我想做同样的事情,我会写一个语义谓词 isRuleBStart(),看起来像这样(伪代码): @parser::members{ public boolean isRuleBSt…

2020年9月18日 0条评论 14点热度 阅读全文

我一直得到MissingTokenException,NullPointerException,如果我没记错的话,我会得到NoViableAlterativeException。 ANTLRWorks的日志文件/控制台输出对我来说不够有用。 我需要的是如下重写: (expression | FLOAT) '(' -> (expression | FLOAT) '*(' 下面是我的语法示例,我通过这些示例来创建测试文件。 grammar Test; expression : //FLOAT '(' -> …

2020年8月29日 0条评论 33点热度 阅读全文

我是ANTLR的新手。我开始探索ANTLR教程。我看到了为垂直规则定义返回类型的示例(请参见下面的示例)。 我也可以将论点传递给规则吗?我只是脑子里有一点,我想根据提供给它的论据来改变规则状态的行为。 如果可以在ANTLR中通过,请帮助我,或者这样做是个好主意吗? atom returns [int value] : INT { $value = Integer.parseInt($INT.text); } | ID // variable reference { Integer v = (Integer) mem…

2020年7月27日 0条评论 14点热度 阅读全文

我正在尝试创建ANTLR语法,该语法将解析以下输入: @code 123 some arbitrary text 我想将其分为三个标记: @code, 123和空格后的任何文本..应该很简单,但是我不明白如何使它起作用。 解决方案如下: 对于antlr来说,这听起来并不是一个好问题。 您可以定义令牌,例如AT:@ [a-z +],NUMBER:[0-9] + WORD:[a-z] +和SIGNIFICANT_SPACE:[] + WS:[\ n] {skip();} 然后像这样的语法 NUMBER [SIGNIFI…

2020年5月20日 0条评论 21点热度 阅读全文

我正在尝试在命令行中运行此代码。运行此命令后,可以在命令行中输入input 如何运行输入并获得输出?我应该按什么按钮? import java.io.*; import org.antlr.runtime.*; public class ParseMain { public static void main(String args[]) throws Exception { //ProjLangLexer lexer = new ProjLangLexer(new ANTLRFileStream(args[0]))…

2020年4月8日 0条评论 13点热度 阅读全文

我正在使用ANTLR 3,我有一个问题是,如果输入中发生任何错误,如何找到下一个预期的令牌。我试图重写解析器的getErrorMessage(RecognitionException e,String [] tokenNames),我会收到错误,但我无法获得“下一个期望的令牌是什么”。如果有人可以帮助。提前致谢。 解决方案如下: 这听起来并不容易。而且经常没有此类信息。 例如,您的语法可以匹配带括号的表达式,例如:(1+2)。 如果您的解析器现在尝试解析"(1+2",则会抛出一个MismatchedTokenExc…

2020年4月3日 0条评论 20点热度 阅读全文