如何在antlr语法中指定固定的数字?
我想解析一个包含固定字符数字段的行。每个字段都是一个数字。
0034 | 9056 | 4567 | 0987 | -2340 | 345 | 1000
以上行是一个示例行。 |表示字段边界(不在实际文件中。此处显示的仅表示边界)。
字段可以包含空白字符+/-
答案 0 :(得分:1)
我保持lexer语法尽可能简单,只需匹配零个或多个空格后跟一个可选符号,后跟解析器语法中的数字。匹配后,检查(在您的解析器语法中)字段的“宽度”是否正确。
示例语法:
line
: field ('|' field)*
;
field
: Spaces? ('+' | '-')? Number // validate if 'field' is correct in this rule
;
Number
: '0'..'9'+
;
Spaces
: ' '+
;
可能的验证方案如下:
line
: field ('|' field)*
;
field
@init{int length = 0;}
: (Spaces {length += $Spaces.text.length();})?
('+' | '-')? Number {length += $Number.text.length(); if(length != 4) {/* do something */}}
;
Number
: '0'..'9'+
;
Spaces
: ' '+
;
答案 1 :(得分:-1)
以下内容如何:
INT : ('+'|'-')? ('0'..'9')+;