假设我有一个 ANTLR 语法:
program = word (' ' word)*
;
word = 'dog' | 'cat' | 'bird'
;
据我了解,它将匹配上述任何单词序列,例如“dog dog cat”、“dog cat bird cat”等。但如果我只想匹配相同值的重复,例如“dog dog”、“cat cat cat cat”、“bird bird bird”等,该如何修改上述语法来做到这一点?
换句话说,我希望“program”规则中重复出现的非终端符号“word”始终匹配相同的生成规则,而不是为“word”指定的任何规则,但不必在“program”规则中明确列出它们中的每一个(例如,如果“word”有大量的替代方案),这意味着我想避免这样的事情:
program:
'dog' (' ' 'dog')*
| 'cat' (' ' 'cat')*
| 'bird' (' ' 'bird')*
...
;
我认为在正则表达式中,这是使用反向引用(例如“\1”)实现的,在 ANTLR 语法中是否有等效的实现,或者有其他方法可以实现?