我正在尝试部分解析我的输入,以便我可以存储某些块以供以后解析。
void start():{}
{
stmt()*
}
void stmt():{}
{
"parse:" expr_later() ";"
}
void expr_later():{}
{
(
expr();
// store tokens from expr() in a list for later processing....
)*
}
void expr():{}
{
"{" expr() "}"
| <ANY:~[]>
}
在这种情况下,“ANY”标记只有在之前的标记与其他标记不匹配时才有效,但假设我有更多的标记定义,上面的语法就不行了。
我知道它~[]
匹配任何字符而不是任何标记。
此外,假设我将使用令牌状态(他们使用 javadoc、pragma 等做的事情),我仍然会在捕获块时遇到问题,因为我没有任何令牌来设置我的特殊令牌状态。此外,根据 JavaCC 的常见问题解答,通过解析器设置令牌状态似乎是一种不好的做法,因为 TokenManager 的队列中可能已经有一些令牌。
所以我想知道是否有任何关于代币的任何等价物。或者至少有人知道如何以不同的方式解决我的问题?