我有一个大致这样定义的语法。
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() 解析时,它会改为声明。我该如何解决这个“冲突”?我尝试了各种组合。