【问题标题】:ANTLR not recognising the token at the beginningANTLR 在开始时不识别令牌
【发布时间】:2020-10-25 22:01:40
【问题描述】:

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

【问题讨论】:

  • 您是否收到来自 ANTLR 的任何消息/警告?您可能缺少顶级规则 expression := addition | assign
  • @jurez 对不起。我错过了在上述命令中编译 java 文件

标签: parsing antlr antlr4 lexer


【解决方案1】:

我在终端上运行的命令是antlr4 rules.g4;grun rules assign -tokens

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

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

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多