我正在尝试使用JavaCC解析正则表达式,但遇到整数问题。问题是,有时在某些作品中,我想将一组数字解释为每个字符,但是在(ab){1,20}之类的东西上,我想将括号内的数字解释为整数。问题是JavaCC在列表中选择匹配的第一个令牌,而不管产品中是否需要该令牌。

我有一个令牌DIGIT和一个令牌INTEGER定义为一个或多个DIGIT。如果我对DIGIT进行优先级排序,它将永远不会选择INTEGER;如果我对INTEGER进行优先级排序,那么在我想一一解释数字的作品中,它将选择INTEGER。

我还试图在生产中定义一个类似()+的东西,但是期望一个整数,但是后来我不知道如何将其分配给令牌。有没有一种方法可以将整个序列分配给单个令牌,或者至少将每个数字附加到一个令牌的图像上或存储一组令牌?

最佳答案

如果您希望数字有时被解释为单个标记,而在其他地方则被解释为整数,则需要使用词法状态。请参阅文档和常见问题解答。您可能可以在{上切换状态,然后再在}上切换状态。像这样

<DEFAULT> TOKEN : {
    <DIGIT : ["0"-"9"]>
}
<INBRACES> TOKEN : {
    <NUMBER : (["0"-"9"])+ >
}
<*> TOKEN {
    <LBRACE : "{" > : INBRACES
|
    <RBRACE : "}" > : DEFAULT
|
    ...other rules apply in all states...
}

关于java - 解决JavaCC token 歧义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23384013/

10-11 08:12