我是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。
我正在尝试做什么,有可能吗?怎么可能?
答案 0 :(得分:1)
在词法分析器中使用解析器生成是不可能的:词法分析器会生成令牌("词语"),后者会被解析器消耗,而解析器会识别单词序列("短语") 。词法分析层位于解析器层下方;没有"反馈渠道"这会让词法分析者学习"解析器正在做什么。
像这样的解析器规则
data_star_int : data '*' INTEGER;
显然,很好,因为解析器规则可以引用词法分析器令牌和其他解析器规则。您可以使用data_star_int
来匹配多令牌序列。
我会用命名令牌替换内联*
,但这是一个偏好的问题。