JavaCC - 匹配除了其他一些词之外的一些词

时间:2015-06-26 18:22:58

标签: java regex parsing javacc

我正在尝试使用javacc为一阶逻辑创建解析器,我遇到了以下问题。

我有这个:

<变量:<更低> (< INNER>)*>

其中

< #INNER:
    (       < UPPER>
    | <降低>
    | < DIGIT>
    | < UNDERSCORE>     )>

< #DIGIT:[" 0" - " 9" ]>
< #LOWER:[" a" - " z" ]>
< #UPPER:[" A" - " Z" ]>
< #UNDERSCORE:" _" >

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

1 个答案:

答案 0 :(得分:0)

由于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等)的放置并不重要。