ANTLR条件词法分析器

问题描述

我有以下ANTLR语法

relation
  : IDENTIFIER EQUAL relative_date
; 
relative_date
 : K_NOW (PLUS | MINUS) NUMERIC_LITERAL TIME_UNIT
;

IDENTIFIER 
 : //'"' (~'"' | '""')* '"'
 '`' (~'`' | '``')* '`'
 | '[' ~']'* ']'
 | [a-zA-Z_] [a-zA-Z_.0-9]* 
;

TIME_UNIT
 : ('h'|'m'|'s'|'d'|'w'|'M'|'y'|'q')
;

PLUS : '+';
MINUS : '-';
EQUAL: '=';
K_NOW : N O W;
NUMERIC_LITERAL
 : [0-9]+ ;

如果我将TIME_UNIT放在IDENTIFIER解析器之前

  • something = now - 5d有效
  • d = now - 5d不起作用,并且首先失败d并说IDENTIFIER是必需的

如果我将TIME_UNIT放在IDENTIFIER解析器之后

  • something = now - 5d在第二个d失败,并说需要TIME_UNIT
  • d = now - 5d在第二个d失败,并说需要TIME_UNIT

有人可以帮助我如何更改两种情况下的语法吗?就像是相对日期一样,请使用TIME_UNIT词法分析器,否则使用IDENTIFIER词法分析器

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)