2010-03-11 114 views
2

我需要在ANTLR匹配包含由/ 第一個字段分開可以具有1..3數字2個字段的消息,第二字段可以具有1..2數字ANTLR歧義

這不起作用

msg: f1 '/' f2; 

f1: DIGIT(DIGIT(DIGIT)?)? ; 
f2: DIGIT(DIGIT)? 
  1. 如何避免在這種情況下的歧義?
  2. 有沒有更優雅的方式來表示ANTLR中的重複次數?

非常感謝 克里斯

回答

3

AFAIR(這是前一段時間我最後一次使用ANTLR),你可以使用「片段」,以避免f1和f2爲頂級令牌:

msg: f1 '/' f2; 

fragment f1: DIGIT(DIGIT(DIGIT)?)? ; 
fragment f2: DIGIT(DIGIT)? 

這可以讓你在f1和f2之間有一個歧義,因爲它們不需要自己匹配。

+0

我仍然得到同樣的錯誤:-([MismatchedTokenException異常] 感謝 – kcris 2010-03-11 21:16:59

+0

對不起,我的錯!我解決它;如果DIGIT太,這是行不通的片段;如果數字是不是一個片段,它的作品! ! 謝謝 – kcris 2010-03-11 21:20:21