В Antlr, если у меня есть правило, например:как проверить маркер ANTLR используется только один раз или меньше в парсер
someRule : TOKENA TOKENB;
было бы принять: «tokena tokenb»
если я хотел tOKENA быть необязательным, я могу сказать,
someRule : TOKENA* TOKENB;
тогда я могу иметь: "tokena tokenb" или "tokenb" или "tokena tokena tokenb"
, но это также означает, что его можно повторить еще раз. В любом случае, я могу сказать, что этот токен может быть там 1 или менее раз, но не более одного? поэтому он принимает:
"tokena tokenb" или "tokenb" НО НО "tokena tokena tokenb"?
Большое спасибо
Я понимаю, второй вариант, я не думаю, чтобы быть в состоянии сделать это, мой провал. В документации написано '?' является «семантическим предикатом», вы можете объяснить, что такое семантический предикат? –
@Simon, нет, '?' Само по себе означает «совпадение с предыдущим однажды или ничем вообще». –
@Simon, я просто ушел, но вы хотите, чтобы я опубликовал последующее описание того, что такое семантический предикат? Если да, просто оставляйте здесь комментарий, и я отправлю ответ позже этим вечером. –