Antlr在Lexer中使用解析器

时间:2012-11-21 15:08:57

标签: java antlr

我是Antlr的新手,我使用Antlr 3定义了基本语法。

语法如下:

grammar data;

@header {
package com.data.language;
}


null        : 'null';
data        : null | STRING | INTEGER;
STRING  : ('a'..'z'|'A'..'Z')+;
INTEGER : '0'..'9'+;

这完美无缺,ANTLRWorks生成代码。但是,我想在词法分析器中使用data关键字。例如:

I : data '*' INTEGER;

问题是,一旦完成,我将收到以下异常:

Error 106: reference to undefined value: data

我看不到ANTLRWorks图表中的数据。我只能看到I lexer的* INTEGER。

我正在尝试做什么,有可能吗?怎么可能?

1 个答案:

答案 0 :(得分:1)

在词法分析器中使用解析器生成是不可能的:词法分析器会生成令牌("词语"),后者会被解析器消耗,而解析器会识别单词序列("短语") 。词法分析层位于解析器层下方;没有"反馈渠道"这会让词法分析者学习"解析器正在做什么。

像这样的解析器规则

data_star_int : data '*' INTEGER;
显然,

很好,因为解析器规则可以引用词法分析器令牌和其他解析器规则。您可以使用data_star_int来匹配多令牌序列。

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