antlr4.7 如何解析零件的持续时间规范(如 "P3M2D"



我被困在试图解析ISO 8601 DAUTION字符串(例如" P3M2D")。请注意,这不允许嵌入式空间。我正在使用antlr4.7

当我尝试使用Lexer规则

ISO8601_INTERVAL
    :   'P' ( y=NUMBER_INT 'Y' )? ( m=NUMBER_INT 'M' )? ( d=NUMBER_INT 'D' )?
    |   'T' etc
    ;

我得到像这样的编译时间警告。/em>。我想避免手动解析。

当我尝试使用解析器规则

iso8601_INTERVAL
    :   'P' ( y=NUMBER_INT 'Y' )? ( m=NUMBER_INT 'M' )? ( d=NUMBER_INT 'D' )?
    |   'T' etc
    ;

我遇到了一个错误,例如"第8:39行不匹配的输入'p2d'期望{'p'..." 是因为Lexer期望令牌被WS分开吗?如果是,如何暂时暂停?

让Antl4解析持续时间输入的各个部分的正确方法是什么?我是Antlr或编译器的新手。

没有antlr期望lexer代币被whitespace分开。

根据您在问题中提供的内容,以下语法应该完成工作:

specs:
    iso*
;
iso:
    P (y=INT Y)? (m=INT M)? (d=INT D)?
;
P: 'P' ;
Y: 'Y' ;
M: 'M' ;
D: 'D' ;
INT: [0-9] ;

您可以看到,我并没有真正改变语法中的任何内容。那是因为我怀疑该错误在您的语法中存在于其他地方,但是由于您还没有提供整个语法,我唯一能给您的是这么小,但(希望)(希望)(希望)工作独立语法。

<</p>

相关内容

  • 没有找到相关文章

最新更新