ANTLR ambiguity
I need to match in ANTLR
a message containing 2 fields separated by a /
First field can have 1..3
digits, the second field can have 1..2
digits,
this does not work
msg: f1 '/' f2;
f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
- How can I avoid ambiguity in such a case? 开发者_StackOverflow中文版
- Is there a more elegant way to express the number of repetitions with
ANTLR
?
Thanks a lot Chris
AFAIR (it's some time ago I last used ANTLR), you can use "fragment" to avoid having f1 and f2 as a top level token:
msg: f1 '/' f2;
fragment f1: DIGIT(DIGIT(DIGIT)?)? ;
fragment f2: DIGIT(DIGIT)?
This allows you to have an ambiguity between f1 and f2, because they don't have to match on their own.
精彩评论