我正在尝试使用JavaCC解析正则表达式,但我遇到了整数问题。问题在于,有时候,在某些制作中,我想将一组数字解释为每个字符,但是,在(ab){1,20}之类的东西上,我想将大括号内的数字解释为整数。问题是JavaCC正在选择列表中匹配的第一个令牌,无论是否在生产中预期该令牌。
我有一个令牌DIGIT和一个令牌INTEGER,被定义为一个或多个DIGIT。如果我优先考虑DIGIT,它永远不会选择INTEGER,如果我优先考虑INTEGER,在我想逐个解释数字的作品中它会选择INTEGER。
我还尝试在生产中定义类似(< DIGIT>)+的东西,期望一个整数,但后来我不知道如何将它分配给一个令牌。有没有办法将整个序列分配给单个令牌,或者至少将每个数字附加到一个令牌的图像或存储一个令牌数组?
答案 0 :(得分:1)
如果您希望有时将数字解释为单个标记,而将其他数字解释为整数,则需要使用词法状态。请参阅文档和常见问题解答。您可以在{
上切换状态,然后返回}
。像这样的东西
<DEFAULT> TOKEN : {
<DIGIT : ["0"-"9"]>
}
<INBRACES> TOKEN : {
<NUMBER : (["0"-"9"])+ >
}
<*> TOKEN {
<LBRACE : "{" > : INBRACES
|
<RBRACE : "}" > : DEFAULT
|
...other rules apply in all states...
}
答案 1 :(得分:0)
您正在尝试在扫描程序中执行某些应该在语法中执行的操作。扫描仪应将数字作为数字返回,并且在语法中允许数字和字符的位置,允许数字出现在制作中。