在Javacc中将字符串作为标记排除

时间:2013-05-01 14:33:44

标签: javacc

我试图在Javacc中创建一个语法,对于一个函数名,我可以有任何各种各样的低位字母或'main'。如果'main'是函数名称,则需要采用不同的过程。

我的问题是,当main作为选项包含时,main不能匹配为字符串文字,而是匹配。所以我希望如果我从令牌中排除'main'这个词,那么它可能会起作用!

< FUNCNAME: (["a"-"z"])+ ~["main"]>

1 个答案:

答案 0 :(得分:2)

最简单的方法是将“main”作为另一个令牌。

TOKEN: { <MAIN: "main" > }
TOKEN: { <FUNCNAME: (["a"-"z"])+ > }

两个规则都匹配前缀“main”,但第一个规则获胜,因为它是第一个。请注意,“维护”仍然是最大蒙克规则的FUNCNAME。请参阅JavaCC FAQ中的FAQ 3.3。