5

我需要匹配ANTLR包含由 / 分隔的 2 个字段的消息第一个字段可以有1..3数字,第二个字段可以有1..2数字,

这不起作用

msg: f1 '/' f2;

f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
  1. 在这种情况下如何避免歧义?
  2. 有没有更优雅的方式来表达重复次数ANTLR

非常感谢克里斯

4

1 回答 1

4

AFAIR(这是我上次使用 ANTLR 的前一段时间),您可以使用“片段”来避免将 f1 和 f2 作为顶级标记:

msg: f1 '/' f2;

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

这使您可以在 f1 和 f2 之间产生歧义,因为它们不必自己匹配。

于 2010-03-11T21:05:24.827 回答