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来匹配多令牌序列。

我会用命名标记替换内联*,但这是一个偏好问题。

+0

这是你已经定义的data_star_int吗? – user1646481

+0

@ user1646481是的,这取代了你的'I'规则(我不想称它为'i',以避免引入与循环变量的通用名称相冲突的名称)。 – dasblinkenlight