java - Antlr 在词法分析器中使用解析器

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

我想做的事情可能吗?怎么可能?

最佳答案

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

像这样的解析器规则

data_star_int : data '*' INTEGER;

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

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

关于java - Antlr 在词法分析器中使用解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496145/

相关文章:

java - 通过maven命令设置config.properties值

java - 在 Windows 中从命令行执行 java 程序失败

java - Java(Spring 应用程序)和 C# 之间的数据交换

java - <String, Object> 到 JSONString 的映射

java - IntelliJ IDEA 中的 "Process finished with exit code 0"是什么意思?

java - 结合 ANTLR 和代码文件

parsing - VBScript 部分解析器

ANTLR "unexpected end of subtree"

compilation - 编译语法时出错

parsing - ANTLR:当其他数字文字也可能时解析 2 位数字