Токен хотя бы один раз

Мне нужно использовать 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>
>
Другие вопросы по тегам