2012-11-07 45 views
1

終端考慮以下簡化的語法:ANTLR如何區分從正則表達式

ID : ('a'..'z') ('a'..'z')*; 

TYPE : 'int' '[' ']' | 
     'boolean' | 
     'int'; 

現在,如果我寫布爾作爲輸入,它可以被解析爲ID或作爲TYPE。我希望它被解析爲類型 - 如何?

回答

1

TYPEID

TYPE : 'int' '[' ']' 
    | 'boolean' 
    | 'int' 
    ; 

ID : ('a'..'z') ('a'..'z')* 
    ; 

ANTLR的詞法規則的工作原理是這樣的:

  1. 匹配儘可能
  2. 後,如果規則#1,兩個或更多的規則匹配相同數量的字符,選擇語法中首先定義的規則

由於這些規則的,"boolean"被標記化作爲TYPE,而"booleans"將被標記化作爲ID


"booleans"標記化視爲兩個標記:TYPE"boolean")和ID"s"))

+0

很好的解釋,謝謝! –

+0

不客氣@PrimožKralj –