JavaCC:与通配符匹配但不消耗状态切换

时间:2011-08-09 08:51:59

标签: java javacc

在JavaCC中,例如在状态DEFAULT中,我想执行状态切换,如果下一个令牌是<A>,我想切换到状态STATE_A,否则,我想要切换到州STATE_B

我尝试使用以下代码与""作为通配符:

TOKEN:
{
  <A: "aa"> : STATE_A
| <NOT_A: ""> : STATE_B
}

但它不起作用,当一个无法缩小到A的字符时,该函数立即返回,并且不会切换到STATE_B,因此""似乎无法完成这项工作。

你有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

我发现这实际上有效。 当A无法匹配时,将匹配空字符串,但是我们需要在非终端的定义中明确引用NOT_A。因此表达式如

[ <A> ]

应改写为

( <A> | <NOT_A> )

强制执行状态切换。