首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANTLR日期和整数匹配

ANTLR日期和整数匹配
EN

Stack Overflow用户
提问于 2012-11-15 01:31:32
回答 1查看 1K关注 0票数 3

我正在评估一种相对简单的IF/THEN语言,但遇到了一个问题:我需要匹配YYYYMMDD格式的整数和日期。如果我可以写一个真正的正则表达式,我就可以很容易地解决这个问题,但还没有想出ANTLR解决方案。

语法看起来像这样:

代码语言:javascript
复制
//overall rule to evaluate a single expression
singleEvaluation returns [boolean evalResult]
  : integerEvaluation {$evalResult = $integerEvaluation.evalResult;}
  | dateEvaluation {$evalResult = $dateEvaluation.evalResult;}
  // etc
  ;


dateEvaluation returns [boolean evalResult]
  : expr1=(INTEGER|'TODAY'|DATE_FIELD_IDENTIFIER) (leftOp=('+'|'-') leftModifier=INTEGER leftQualifier=DATE_QUALIFIER)? 
    operator=(EQ|NE|LT|LE|GT|GE) 
    expr2=(INTEGER|'TODAY'|DATE_FIELD_IDENTIFIER) (rightOp=('+'|'-') rightModifier=INTEGER rightQualifier=DATE_QUALIFIER)?
{ // code }

integerEvaluation returns [boolean evalResult]
  : expr1=(NUM_FIELD_IDENTIFIER|INTEGER) 
    operator=(EQ|NE|LT|LE|GT|GE) 
    expr2=(NUM_FIELD_IDENTIFIER|INTEGER)
  { // code
  }
  ;

fragment DIGIT: '0'..'9';
INTEGER: DIGIT+;
DATE_FIELD_IDENTIFIER: ('DOB'|'DATE_OF_HIRE');
NUM_FIELD_IDENTIFIER: ('AGE'|'DEPARTMENT_ID');
DATE_QUALIFIER:('YEAR'|'YEARS'|'MONTH'|'MONTHS'|'DAY'|'DAYS'|'TODAY');
EQ:'=';
NE: '<>';
LT: '<';
LE: '<=';
GT: '>';
GE: '>=';

需要解析的语句的一个示例是"65 > AGE“或"AGE < 65",或者”道布> 19500101“。

有没有人能建议一种方法,让解析器区分整数和8位日期格式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-15 03:41:16

词法分析器匹配INTEGER后,可以检查匹配的文本(通过$text引用),并根据自定义检查决定将其类型从INTEGER更改为DATEDATE规则可以作为一个空的fragment规则,然后可以在解析器规则中使用,就像它是一个普通的词法分析器规则一样。

快速演示:

代码语言:javascript
复制
INTEGER
 : DIGIT+
   {
     // If this token starts with either '19' or '20', followed 
     // by 6 digits, change it to a DATE-token.
     if ($text.matches("(19|20)\\d{6}")) {
       $type = DATE;
     }
   }
 ;

fragment DATE : /* empty! */ ;

然后在解析器规则中,您可以只使用DATE

代码语言:javascript
复制
dateEvaluation
 : DATE ...
 ;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13384064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档