我正在尝试使用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等值。
答案 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等)的放置并不重要。