1

我是 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 词法分析器的 * INTEGER。

是我想要做的,有可能吗?这怎么可能?

4

1 回答 1

1

在词法分析器中使用解析器生成是不可能的:词法分析器生成稍后由解析器使用的标记(“单词”),而解析器识别单词序列(“短语”)。词法分析器层位于解析器层之下;没有“反馈通道”可以让词法分析器“了解”解析器正在做什么。

像这样的解析器规则

data_star_int : data '*' INTEGER;

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

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

于 2012-11-21T15:28:10.653 回答