我的ANTLR4有问题。我正在尝试从python 3代码打印AST,但有一些错误,我不知道如何修复它们。
我编写了简单的测试代码:
a=(1,2,3)
print(a)
我运行了程序,但出现了以下错误:
line 1:1 extraneous input '=' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
line 2:0 extraneous input '\n' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
line 3:0 extraneous input '\n' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
我的主要班级:
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import org.antlr.v4.*;
public class Main {
public static void main(String[] args) {
try {
ANTLRInputStream input = new ANTLRFileStream("/home/grzegorz/Desktop/Python3/input.txt");
Python3Lexer lexer = new Python3Lexer(input);
CommonTokenStream token = new CommonTokenStream(lexer);
Python3Parser parser = new Python3Parser(token);
ParseTree parseTree = parser.expr();
System.out.println(parseTree.toStringTree(parser));
}catch (Exception ex){
ex.printStackTrace();
}
}
}
我有这个网站的语法:https://github.com/antlr/grammars-v4/tree/master/python3
您的输入文件由两条语句组成,您正在解析该文件,就像它是一个表达式一样(第行ParseTree ParseTree=parser.expr()
;规则
expr
来自Python 3语法)。
这也解释了第一个错误:标识符
a
被接受为表达式的一部分,但=
符号不被接受。这是因为=
是赋值语句的一部分。
使用另一个语法规则解析输入,例如
file\u input
规则,该规则将接受许多语句。将上述行更改为ParseTree ParseTree=parser。文件输入()
。
是的,这几乎是如何在ANTLR4中捕获无关输入的复制品?-但在Java的情况下,我需要一个Python解决方案,而移植Java解决方案对我来说根本不管用! ANTLR4正在向控制台写入以下“错误”。我希望这会导致一个硬停止,但解析器会继续并最终重新同步: 我希望这是一个致命的错误。 因此,我定义了自己的错误侦听器,并覆盖了所有4个方法: 我创建了我的lexer,删除了默认的控制台错误监听器,并将我
我在过去(90年代中期)使用过ANTLR,并决定重新使用它,因为我想为赋值文件中的注释以及Unicode关键字和值提供支持。 我的简单测试文件再次证明,即使使用好的工具,编写正确的语法也是一个困难的问题。我正在使用VS2012的ANTLR语言支持插件,并用C#进行开发。所以,我对Eclipse/Java保留很满意,但是C#插件和ANTLR Nuget包(运行时和代码生成器)完全按照广告所说的那样工
我所开发的ANTR4语法。在解析字符串期间 时间;25 10 * * *;' faccalc_minus1_cron.out.'yyyyMMdd。嗯;美国/New_York 我有以下错误 表达式中的字符无效!表达式:;'无效字符:;'无关输入“;”应为{“”,整数,“-”,“/”,“,”},缺少“;”“\uu”处的时区格式不正确:faccalc\u minus1 我不理解为什么,因为正则表达式规则
我是ANTLR的新手。我想写一个语法来解析下面的输入: 语法如下:: 当我尝试使用语法解析上述输入时,它会引发以下异常:: 第1行:0不匹配的输入'commit a1b2c3d4',应为'commit' 我已经引用了ANTLR4:不匹配的输入链接,但仍然不清楚发生了什么。
问题内容: 我只是通过跟随有关Udemy的教学视频开始学习Go的,我尝试按如下方式打印当前时间 我得到一个很长的文本作为输出如下 我原本希望只在其后加上a ,这应该是结尾。预期的输出如下所示,也如本教程视频中所示。但是对我来说,结果的形式要长得多。 问题是,为什么同一个命令在教师的程序和我的程序之间返回不同的格式?为什么没有设置特定的格式,不应该返回一种格式? 问题答案: 问题是,为什么同一条命令
Berat有资格获得驾驶执照! Berat不能买酒! Berat的有效年龄:真 虽然,我优先考虑每个规则与突出关键字,“可以由酒精”规则仍然被解雇。它不应该被激发,因为在第一个规则中执行setValid(true),而在第二个规则中执行isValid()==false控件应该返回false,因此应该遗漏部分。