私はこのように大まかに定義された文法を持っています。
TOKEN:{
<T_INT: "int"> |
<T_STRING: ["a"-"z"](["a"-"z"])*>
}
SKIP: { " " | "\t" | "\n" | "\r" }
/** Main production. */
SimpleNode Start() : {}
{
(LOOKAHEAD(Declaration()) Declaration() | Function())
{ return jjtThis; }
}
void Declaration() #Decl: {}
{
<T_INT> <T_STRING> ";"
}
void Function() #Func: {}
{
<T_STRING> "();"
}
これは、次のような場合に正常に機能します。
int a;
foo();
しかし、私が試してみるとint();
、これは私にとって合法であり、Function()によって解析される必要がありますが、代わりに宣言になります。この「競合」を修正するにはどうすればよいですか?いろいろ組み合わせてみました。