How to “skip” a rule in order to favor one rule over the other?
我目前正在使用 antlr 构建日期解析器。它需要的输入是
1
2 |
year monthName numDayOfMonth era
numDayOfMonth monthName year era |
这些都在
1
2 3 4 5 6 7 8 9 |
stringDate: year monthName numDayOfMonth | numDayOfMonth monthName year; numYear: NUMBER ; NUMBER: [0–9]+ ; |
在我的听众中,我检查以确保
问题是,如果输入日期
有没有办法让评估者跳过这条规则,转而使用替代方法?
为什么不将年份的标记定义更改为仅包含 4 位数字?这将解决问题。
所以,你的年份和日期将是
1
2 |
numYear: [0–9] [0–9] [0–9] [0–9]
numDayOfMonth: [0–9] | [0–9] [0–9] |
目前,它们都具有相同的定义 – 因此解析器在解析时不知道要选择哪个规则,而是选择第一个适合输入的规则。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/267575.html