我有一个大致定义如下的语法。
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();时,它对我来说是合法的,应该由函数()来解析,它转而使用声明。我如何解决这个“冲突”?我尝试了各种组合。
发布于 2012-06-05 16:45:51
JavaCC常见问题解答的标题是"How do I deal with keywords that aren't reserved?“。
我要做的是允许关键字替代标识符,即
(<T_STRING> | <T_INT>) "();"当有许多关键字时,创建一个允许所有关键字以及通用标识符令牌的Identifier产品可能是有益的。
顺便说一下,您可能需要"(" ")" ";"而不是"();"。
https://stackoverflow.com/questions/10891950
复制相似问题