首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaCC语法冲突

JavaCC语法冲突
EN

Stack Overflow用户
提问于 2012-06-05 13:15:19
回答 1查看 257关注 0票数 1

我有一个大致定义如下的语法。

代码语言:javascript
复制
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> "();"
}

这对于像这样的东西很有效:

代码语言:javascript
复制
int a;
foo();

但是当我尝试int();时,它对我来说是合法的,应该由函数()来解析,它转而使用声明。我如何解决这个“冲突”?我尝试了各种组合。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-05 16:45:51

JavaCC常见问题解答的标题是"How do I deal with keywords that aren't reserved?“。

我要做的是允许关键字替代标识符,即

代码语言:javascript
复制
(<T_STRING> | <T_INT>) "();"

当有许多关键字时,创建一个允许所有关键字以及通用标识符令牌的Identifier产品可能是有益的。

顺便说一下,您可能需要"(" ")" ";"而不是"();"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10891950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档