我是ANTLR的初学者,我想编写一个检测变量的程序。为此,我编写了以下ANTLR代码,但是当我使用grun
测试它时,在输入输入line 1:0 token recognition error at: 'p'
时出现错误p=10
。我不明白为什么这行不通。
grammar rules;
/*
* Parser Rules
*/
addition : NUMBER PLUS NUMBER;
assign : VARIABLE ASSIGNMENT NUMBER;
/*
* Lexer Rules
*/
VARIABLE : [a-zA-Z_]+;
NUMBER : [0-9]+ ;
WHITESPACE : [ \n\t\r]+ -> skip ;
NEWLINE: '\n';
PLUS : '+';
ASSIGNMENT : '=';
加法规则很好,但是分配不起作用。
我在终端上运行的命令是antlr4 rules.g4;grun rules assign -tokens
,然后输入p=10
进行测试,但仍然无法正常工作,并显示line 1:0 token recognition error at: 'p'
错误。
答案 0 :(得分:0)
我在终端上运行的命令是
antlr4 rules.g4;grun rules assign -tokens
antlr4
将根据您的语法生成Java源文件。 grun
将访问rulesParser.class
和rulesLexer.class
。您所缺少的是使用javac
将生成的源文件编译为类文件之间的步骤。
由于您没有遇到grun
找不到类的任何错误,因此上次运行javac
时可能仍然遗留了类文件。因此grun
正在执行那些旧文件,这些文件显然还不包含与字母(或至少不包含字母p)匹配的内容。使用javac
编译源文件应该可以解决此问题。