2017-07-30 77 views
-1

我已经开始使用ANTLR为克隆检测和删除系统构建解析器和词法分析器。 我想建立一个语法不要区分私人,公共和受保护的关键字,因为我想将它们视为相同的东西,但是当我尝试这样做时,它不会正确标记我的输入。Antlr Grammer for Java的更改

我已经从link中取出了我的grammer .g4文件,并在其中做了一些修改,如下所示。

PRIVATE  : 'public' || 'private' || 'protected'; 
RETURN  : 'return'; 
SHORT   : 'short'; 

任何帮助,将不胜感激!

回答

1

此:

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';