我是 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。
我想做的事情可能吗?怎么可能?
最佳答案
在词法分析器中使用解析器生成是不可能的:词法分析器生成稍后由解析器使用的标记(“单词”),而解析器则识别单词序列(“短语”)。词法分析器层位于解析器层之下;没有“反馈 channel ”可以让词法分析器“学习”解析器正在做什么。
像这样的解析器规则
data_star_int : data '*' INTEGER;
显然没问题,因为解析器规则可以引用词法分析器标记和其他解析器规则。您可以使用data_star_int
来匹配多 token 序列。
我会用命名 token 替换内联的 *
,但这是一个偏好问题。
关于java - Antlr 在词法分析器中使用解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496145/