parsing - ANTLR 在开始时不识别令牌
问题描述
我是 ANTLR 的初学者,我想制作一个检测变量的程序。为此,我编写了以下 ANTLR 代码,但是当我使用 测试它时,输入 input时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'
错误。
解决方案
我在终端上运行的命令是
antlr4 rules.g4;grun rules assign -tokens
antlr4
将从您的语法生成 Java 源文件。grun
将访问rulesParser.class
和rulesLexer.class
。您缺少的是用于javac
将生成的源文件编译为类文件之间的步骤。
由于您没有收到任何有关grun
无法找到类的错误,因此您可能仍然有上次运行时遗留的类文件javac
。执行那些旧文件也是如此grun
,它们显然不包含任何与字母匹配的内容(或至少不包含字母 p)。编译你的源文件javac
应该可以解决这个问题。
推荐阅读
- python - 从熊猫列中的列表中删除字符
- amazon-web-services - 如果在 aws cloud watch 中空闲 30 分钟,如何停止我们的实例
- powerbi - 如何在 Power BI 中使用 DAX 进行划分?
- java - Glassfish 5.1 缺少以前版本的模块
- magento2 - 报价表的自定义属性不保存价值
- autocomplete - 如何从输入中删除自动完成?
- python - Python pandas 试图计算字数
- php - PHP / HTML是否可以使用户上传文件不是强制性的
- java - 这个人使用哪个带有 2 个参数的 random() 库?
- mongodb - mongodb map-reduce 返回错误值