令牌至少一次

时间:2015-06-16 09:49:50

标签: javacc

我需要使用javaCC从错误中识别正确的语法。

< #horario : "<"<hora>":"<minuto>"-"<hora>":"<minuto>">"<retorno> >
< #horarioError : "<" ("()"|"(" (~["<", ">"])+")")? ">"<retorno> >

第一个是正确的语法,第二个是识别tge错误。

错误定义可以包含正确的语法,但至少有一次错误。

这是我的想法,但它将正确的分类为错误:

< error : (<diaSemana>(<horarioError>|<horario>)<retorno>)+<delimitador> >

如何在任何一行中至少出现一次horarioError?

感谢。

1 个答案:

答案 0 :(得分:1)

首先,我认为你试图在词汇层面做太多。我建议除了最低级别的标记之外,使用解析(BNF)规则。

要回答这个问题,您可以执行以下操作:

< error : ( <diaSemana> 
            <horario><retorno>
          )*
          ( <diaSemana> 
            <horarioError><retorno>
          )
          ( <diaSemana> 
            (<horarioError>|<horario>)<retorno>
          )*
          <delimitador>
>