後で解析するために特定のチャンクを保存できるように、入力を部分的に解析しようとしています。
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、プラグマなどで行うもの) を使用するとします。特別なトークンの状態を設定するためのトークンがないため、チャンクのキャプチャにまだ問題があります。また、パーサーを介してトークンの状態を設定することは、JavaCC の FAQ によると、不適切な方法のようです。これは、TokenManager のキューに既にいくつかのトークンが含まれている可能性があるためです。
だから、トークンに関してANYと同等のものがあるかどうか疑問に思っています。または、誰かが少なくとも私の問題に別の方法でアプローチする方法を知っていますか?