在ANTLR中重用保留关键字规则

时间:2016-07-19 06:36:03

标签: java antlr3

我正在使用ANTLR 3.4。我已经定义了像

这样的词法分析器规则
Description:
'description'
 ;

如果我使用此规则,我将无法在我的语言中使用'description',因为它现在是一个关键字。我可以通过哪种方式为非保留关键字编写规则。 语法规则看起来像 -

Lexer rule

Description
:
'description'
;

Protocol
:
'protocol'
;
Define
:
'define'
;
Equal
:
'='
;




Parser rule


mainrule
:
Define Protocol stringrule descrule? fields* finishrule
;

descrule
:
Description? stringrule?
;

fields
:
type stringrule  Equal? stringrule?

stringrule
:
// rule which accept any string
;

示例:我的语言看起来像这样 -

define protocol description 'Protocol for login'
int ip=192.168.0.0;
string description='remote user';
finish protocol;

这里的ip和描述是协议的字段,协议有描述(这是关键字)。但我不能使用'description'作为字段名称,因为它是一个关键字。

1 个答案:

答案 0 :(得分:2)

stringrule匹配任何关键字和词法分析器的标识符规则:

stringrule
 : Description
 | Protocol
 | Define
 | Identifier
 ;

Description
 : 'description'
 ;

Protocol
 : 'protocol'
 ;

Define
 : 'define'
 ;

Identifier
 : ('a'..'z' | 'A'..'Z')+
 ;