Java 的 Antlr 语法变化
Changes in Antlr Grammar for Java
我已经开始使用 ANTLR 构建用于克隆检测和删除系统的解析器和词法分析器。
我想构建一个不区分 private、public 和 protected 关键字的语法,因为我想将它们视为相同的东西,但是当我尝试这样做时,它没有正确标记我的输入。
我从 link 中获取了我的语法 .g4 文件,并在其中做了一些修改,如下所示。
PRIVATE : 'public' || 'private' || 'protected';
RETURN : 'return';
SHORT : 'short';
这个:
PRIVATE : 'public' || 'private' || 'protected';
不正确。它可以重写为:
PRIVATE
: 'public'
|
| 'private'
|
| 'protected'
;
换句话说:它匹配一个空字符串。
你可能想这样写:
PRIVATE : 'public' | 'private' | 'protected';
有点奇怪的名字,顺便说一句:PRIVATE
。我期望的是这样的:
MODIFIER : 'public' | 'private' | 'protected';
或使用解析器规则:
modifier : PUBLIC | PRIVATE | PROTECTED;
PUBLIC : 'public';
PRIVATE : 'private';
PROTECTED : 'protected';
我已经开始使用 ANTLR 构建用于克隆检测和删除系统的解析器和词法分析器。 我想构建一个不区分 private、public 和 protected 关键字的语法,因为我想将它们视为相同的东西,但是当我尝试这样做时,它没有正确标记我的输入。
我从 link 中获取了我的语法 .g4 文件,并在其中做了一些修改,如下所示。
PRIVATE : 'public' || 'private' || 'protected';
RETURN : 'return';
SHORT : 'short';
这个:
PRIVATE : 'public' || 'private' || 'protected';
不正确。它可以重写为:
PRIVATE
: 'public'
|
| 'private'
|
| 'protected'
;
换句话说:它匹配一个空字符串。
你可能想这样写:
PRIVATE : 'public' | 'private' | 'protected';
有点奇怪的名字,顺便说一句:PRIVATE
。我期望的是这样的:
MODIFIER : 'public' | 'private' | 'protected';
或使用解析器规则:
modifier : PUBLIC | PRIVATE | PROTECTED;
PUBLIC : 'public';
PRIVATE : 'private';
PROTECTED : 'protected';