在 ANTLR 中重用保留关键字规则
Reuse a reserved keyword rule in ANTLR
我正在使用 ANTLR 3.4。我定义了一个词法分析器规则,例如
Description:
'description'
;
如果我使用此规则,我将无法在我的语言中使用 'description',因为它现在是 keyword.Is,我可以通过任何方式为非保留关键字编写规则。
语法规则看起来像-
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 是协议的字段,协议有描述(这是关键字)。但是我不能使用 'description' 作为字段名,因为它是关键字。
使 stringrule
匹配任何关键字和您的词法分析器的标识符规则:
stringrule
: Description
| Protocol
| Define
| Identifier
;
Description
: 'description'
;
Protocol
: 'protocol'
;
Define
: 'define'
;
Identifier
: ('a'..'z' | 'A'..'Z')+
;
我正在使用 ANTLR 3.4。我定义了一个词法分析器规则,例如
Description:
'description'
;
如果我使用此规则,我将无法在我的语言中使用 'description',因为它现在是 keyword.Is,我可以通过任何方式为非保留关键字编写规则。 语法规则看起来像-
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 是协议的字段,协议有描述(这是关键字)。但是我不能使用 'description' 作为字段名,因为它是关键字。
使 stringrule
匹配任何关键字和您的词法分析器的标识符规则:
stringrule
: Description
| Protocol
| Define
| Identifier
;
Description
: 'description'
;
Protocol
: 'protocol'
;
Define
: 'define'
;
Identifier
: ('a'..'z' | 'A'..'Z')+
;