Токен хотя бы один раз
Мне нужно использовать javaCC, чтобы определить правильный синтаксис от ошибок.
< #horario : "<"<hora>":"<minuto>"-"<hora>":"<minuto>">"<retorno> >
< #horarioError : "<" ("()"|"(" (~["<", ">"])+")")? ">"<retorno> >
Первый - правильный синтаксис, а второй - ошибки tge.
Определение ошибки может содержать правильный синтаксис, но как минимум один раз ошибка.
Это то, что я думал, но он классифицирует правильные как ошибку:
< error : (<diaSemana>(<horarioError>|<horario>)<retorno>)+<delimitador> >
Как сделать так, чтобы в любой строке появлялся хотя бы один раз horarioError?
Благодарю.
1 ответ
Прежде всего, я думаю, что вы пытаетесь сделать слишком много на лексическом уровне. Я предлагаю использовать правила синтаксического анализа (BNF) для всех, кроме самого низкого уровня токенизации.
Чтобы ответить на вопрос, вы можете сделать следующее:
< error : ( <diaSemana>
<horario><retorno>
)*
( <diaSemana>
<horarioError><retorno>
)
( <diaSemana>
(<horarioError>|<horario>)<retorno>
)*
<delimitador>
>