JavaCC-匹配除其他单词外的其他单词

JavaCC-匹配除其他单词外的其他单词,java,regex,parsing,javacc,Java,Regex,Parsing,Javacc,我试图使用javacc为一阶逻辑创建一个解析器,我有以下问题 我有这个: 其中 ,但我想从中排除一些词。特别是我想排除sum、count、avg、max和min这几个词。有没有办法做到这一点?换句话说,我希望变量以小写字母开头,后跟任意数量的内部标记,其中内部标记可以是大写字母、小写字母、数字或下划线。但是,我不希望变量采用sum、count、avg、max和min等值。因为JavaCC选择第一个匹配最长字符串的正则表达式,所以您需要做的就是将保留字的规则放在第一位。比如说 TOKE

我试图使用javacc为一阶逻辑创建一个解析器,我有以下问题

我有这个:

)*>

其中

<#内部:
(
|
|
|<下划线> )>

<#数字:[“0”-“9”]>
<#较低:[“a”-“z”]>
<#上部:[“A”-“Z”]>
<#下划线:“\u”>


,但我想从中排除一些词。特别是我想排除sum、count、avg、max和min这几个词。有没有办法做到这一点?换句话说,我希望变量以小写字母开头,后跟任意数量的内部标记,其中内部标记可以是大写字母、小写字母、数字或下划线。但是,我不希望变量采用sum、count、avg、max和min等值。

因为JavaCC选择第一个匹配最长字符串的正则表达式,所以您需要做的就是将保留字的规则放在第一位。比如说

TOKEN : {
    <SUM : "sum">
|   <COUNT: "count">
|   <AVG: "avg" >
|   <MIN: "min">
|   <MAX: "max" >
/* The next rule must come after the ones above. */
|   < VARIABLE : < LOWER > (< INNER >)* > 
}
令牌:{
|   
|   
|   
|   
/*下一条规则必须在上述规则之后*/
|)*>
}

片段规则(#INNER、#LOWER等)的位置并不重要。

由于JavaCC选择第一个与最长字符串匹配的正则表达式,所以您只需将保留字的规则放在第一位。比如说

TOKEN : {
    <SUM : "sum">
|   <COUNT: "count">
|   <AVG: "avg" >
|   <MIN: "min">
|   <MAX: "max" >
/* The next rule must come after the ones above. */
|   < VARIABLE : < LOWER > (< INNER >)* > 
}
令牌:{
|   
|   
|   
|   
/*下一条规则必须在上述规则之后*/
|)*>
}
片段规则的位置(内部、较低等)并不重要