2015-06-26 59 views
0

我想创建一个使用javacc的一阶逻辑的解析器,我有以下问题。JavaCC - 匹配除一些其他字外

我有这样的:

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

其中

< #INNER:
( <上级>
| <更低>
| < DIGIT>
| < UNDERSCORE> )>

< #DIGIT:[ “0” - “9”]>
< #LOWER:[ “一个” - “Z”]>
< C上部:[ “A” - “Z”]>
< #UNDERSCORE:“_”>

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

回答

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等)的放置无关紧要。