ANTLR 一开始不识别令牌

ANTLR not recognising the token at the beginning

我是ANTLR初学者,想做一个检测变量的程序。为此,我编写了以下 ANTLR 代码,但是当我使用 grun 测试它时,它在输入 p=10 时给我一个错误 line 1:0 token recognition error at: 'p'。我无法理解为什么这不起作用。

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' 错误。

The command I am running on terminal is antlr4 rules.g4;grun rules assign -tokens

antlr4 将从您的语法生成 Java 个源文件。 grun 将访问 rulesParser.classrulesLexer.class。您缺少的是使用 javac 将生成的源文件编译为 class 文件之间的步骤。

由于您没有收到关于 grun 无法找到 class 的任何错误,您可能仍然有 class 上次 [=] 遗留下来的文件28=] javac。所以 grun 正在执行那些旧文件,这些文件显然不包含任何匹配字母的内容(或者至少不包含字母 p)。使用 javac 编译源文件应该可以解决这个问题。