Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决JavaCC令牌歧义_Java_Regex_Parsing_Token_Javacc - Fatal编程技术网

解决JavaCC令牌歧义

解决JavaCC令牌歧义,java,regex,parsing,token,javacc,Java,Regex,Parsing,Token,Javacc,我试图用JavaCC解析正则表达式,但遇到了整数的问题。问题是,有时,在某些产品中,我想将一组数字解释为每个字符,然而,在(ab){1,20}之类的东西上,我想将大括号内的数字解释为整数。问题在于JavaCC正在选择列表中匹配的第一个令牌,而不管该令牌是否会出现在产品中 我有一个令牌数字和一个令牌整数,定义为一个或多个数字。如果我对数字进行优先级排序,它将永远不会选择整数;如果我对整数进行优先级排序,在我想要逐个解释数字的产品中,它将选择整数 我还尝试在产品中定义()+之类的东西,希望得到一个整

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

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


我还尝试在产品中定义()+之类的东西,希望得到一个整数,但我不知道如何将其分配给令牌。有没有办法将整个序列分配给一个令牌,或者至少将每个数字附加到一个令牌的图像中,或者存储一个令牌数组?

您正在尝试在扫描仪中执行语法中应该执行的操作。扫描仪应将数字作为数字返回,并且在语法中允许数字和字符出现的位置,允许数字出现在产品中。

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

<DEFAULT> TOKEN : {
    <DIGIT : ["0"-"9"]>
}
<INBRACES> TOKEN : {
    <NUMBER : (["0"-"9"])+ >
}
<*> TOKEN {
    <LBRACE : "{" > : INBRACES 
|
    <RBRACE : "}" > : DEFAULT
|
    ...other rules apply in all states...
}
令牌:{
}
代币:{
}
代币{
:种内
|
:默认值
|
…其他规则适用于所有州。。。
}