1

我正在尝试在 Javacc 中创建语法,对于函数名,我可以使用任何各种小写字母或“主”。如果 'main' 是函数名,则需要采取不同的过程。

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

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

1 回答 1

3

最简单的做法是让“main”成为不同的标记。

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

两个规则都匹配前缀“main”,但第一个获胜,因为它是第一个。请注意,根据最大咀嚼规则,“维护”仍然是 FUNCNAME。请参阅 JavaCC 常见问题解答中的常见问题解答 3.3。

于 2013-05-02T00:16:31.523 回答