我被困在试图解析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>