我试图在Javacc中创建一个语法,对于一个函数名,我可以有任何各种各样的低位字母或'main'。如果'main'是函数名称,则需要采用不同的过程。
我的问题是,当main作为选项包含时,main不能匹配为字符串文字,而是匹配。所以我希望如果我从令牌中排除'main'这个词,那么它可能会起作用!
< FUNCNAME: (["a"-"z"])+ ~["main"]>
答案 0 :(得分:2)
最简单的方法是将“main”作为另一个令牌。
TOKEN: { <MAIN: "main" > }
TOKEN: { <FUNCNAME: (["a"-"z"])+ > }
两个规则都匹配前缀“main”,但第一个规则获胜,因为它是第一个。请注意,“维护”仍然是最大蒙克规则的FUNCNAME。请参阅JavaCC FAQ中的FAQ 3.3。