![](/img/trans.png)
[英]How to keep a value taken from a rule in a variable and reuse it in the ANTLR grammar?
[英]Reuse a reserved keyword rule in ANTLR
我正在使用ANTLR 3.4。我已經定義了一個lexer規則
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是協議字段,協議有描述(這是關鍵字)。但是我不能使用'description'作為字段名,因為它是一個關鍵字。
使stringrule
匹配任何關鍵字和詞法分析器的標識符規則:
stringrule
: Description
| Protocol
| Define
| Identifier
;
Description
: 'description'
;
Protocol
: 'protocol'
;
Define
: 'define'
;
Identifier
: ('a'..'z' | 'A'..'Z')+
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.