2013-07-03 147 views
0

我掙扎瞭解ANTLR,我試圖匹配這樣一句話:ANTLR令牌匹配,而不是文本

name "some_name" module .... 

的grammare文件看起來像這樣的:

swdFile : nameDecl module* EOF; 

nameDecl: NAME DBL_QUOTE appName DBL_QUOTE; 

appName: TEXT; 

module: MODULE; 


DBL_QUOTE : '\"'; 
NAME:'name'; 
MODULE:'module'; 
TEXT : ('a'..'z'|'A'..'Z')+ ; 

該作品很好,但有一個我似乎無法理解的小故障。如果我試圖解析這段文字,它會失敗,因爲它將引用文本與令牌匹配:

name "module" module ... 

爲什麼?我明確告訴過,引號之間的內容是純文本,它應該匹配TEXT標記。

回答

1

詞法分析器沒有被解析器驅動。所以,你的輸入"module"被符號化如下:

  • DBL_QUOTE
  • MODULE
  • DBL_QUOTE

,併爲此不受解析器規則nameDecl: NAME DBL_QUOTE appName DBL_QUOTE;匹配。

... 

nameDecl : NAME STRING; 

...  

STRING : '"' ~'"'* '"'; 
NAME : 'name'; 
MODULE : 'module'; 

... 
+0

行,所以詞法「標記化」我在「獨立」與分析器輸入莫名其妙:字符串文本通常是由詞法分析器,在這種情況下,你不會有一個問題來處理。感謝Bart的回答,我需要將引號移動到令牌中,以便antlr可以正確識別引用的「STRING」。仍然爲什麼antlr試圖匹配每個TOKEN,只有在它匹配解析器語法之後? – victor

+0

我想如何處理案件,當我想解析的東西沒有引號 - >'名稱模塊模塊',我想模塊的第一次出現是名稱,第二個模塊是好的..模塊令牌。謝謝 ! – victor