ANTLR的使用分析器内词法
问题描述:
我是新来ANTLR的,我已经定义使用ANTLR的3ANTLR的使用分析器内词法
一个基本语法的语法可以在下面看到:
grammar data;
@header {
package com.data.language;
}
null : 'null';
data : null | STRING | INTEGER;
STRING : ('a'..'z'|'A'..'Z')+;
INTEGER : '0'..'9'+;
这工作完全和ANTLRWorks产生码。但是,我想在词法分析器中使用数据关键字。例如:
I : data '*' INTEGER;
的问题是,一旦这样做,我得到以下异常:
Error 106: reference to undefined value: data
,我无法看到ANTLRWorks的图表中的数据。我只能看到I lexer的* INTEGER。
是我想要做的,有可能吗?这怎么可能?
答
在词法分析器中使用分析器产品是不可能的:词法分析器产生稍后被分析器使用的令牌(“单词”),而分析器识别单词序列(“短语”)。词法分析器层在解析器层下面;没有任何“反馈渠道”可以让词法分析器“了解”解析器在做什么。
这样
data_star_int : data '*' INTEGER;
解析器规则是,很明显,细,因为语法规则可以参考词法分析器令牌和其它语法规则两者。您可以使用data_star_int
来匹配多令牌序列。
我会用命名标记替换内联*
,但这是一个偏好问题。
这是你已经定义的data_star_int吗? – user1646481
@ user1646481是的,这取代了你的'I'规则(我不想称它为'i',以避免引入与循环变量的通用名称相冲突的名称)。 – dasblinkenlight