2009-10-25 87 views
1

我想爲我的語言添加關鍵字。Antlr中是否有一種機制允許詞法分析器僅在特定規則期間匹配令牌?

這個關鍵字只需要在一個特定的語法分析器語法規則中匹配。

由於向後兼容,我希望允許此關鍵字繼續作爲變量名稱使用,即它可以通過詞法分析器規則進行匹配,該規則確定令牌是否適合變量名稱。

只要在文件中找到,Lexer就會匹配新規則。

解決此問題的適當方法是修改var_declaration規則,使其匹配IDENT或新的KEYWORD標記?

protected 
modified_var_declaration: 
    VAR (IDENT|KEYWORD); 
; 

相關的規則是:

IDENT // matches variable names 
options { testLiterals=true; } 
    : ('_' | 'a'..'z' | 'A'..'Z') ('_' | 'a'..'z' | 'A'..'Z' | DIGIT)* 
; 

KEYWORD: // my new keyword 
    "key" 
; 

創建變量解析器規則是:

protected 
var_declaration: 
    VAR IDENT; 
; 

回答

2

許多語言有上下文相關的關鍵字。處理它們的第一步是添加一個代表變量名稱的新解析器規則ident。在解析器中使用該規則而不是IDENT

ident 
    : IDENT 
    | KEYWORD 
    ; 
+0

適合我。 – chollida 2009-10-25 05:41:34

0

退房http://www.antlr.org/wiki/display/ANTLR3/1.+Lexer這應該會幫助你。您將需要設置和取消設置標誌時,「KEYWORD」將被允許,即

KEYWORD : { keywordcontext }?=> "key"; 

這裏的伎倆會被觸發,你可以期待一個關鍵字,這可能是少於瑣碎。

相關問題