如何在antlr语法中指定一个固定的数字号码?ANTLR中的固定数字格式
我想解析一个包含固定数量字符的字段的行。每个字段都是一个数字。
0034 | 9056 | 4567 | 0987 | -2340 | +345 | 1000
以上这行是示例行。 |表示字段边界(它不会出现在实际的文件中,这里只是为了表示边界)。
的字段可以包含空白字符+/-
如何在antlr语法中指定一个固定的数字号码?ANTLR中的固定数字格式
我想解析一个包含固定数量字符的字段的行。每个字段都是一个数字。
0034 | 9056 | 4567 | 0987 | -2340 | +345 | 1000
以上这行是示例行。 |表示字段边界(它不会出现在实际的文件中,这里只是为了表示边界)。
的字段可以包含空白字符+/-
什么如下:
INT : ('+'|'-')? ('0'..'9')+;
我会保持词法语法尽可能简单,只是匹配零个或多个空格后跟可选符号后跟解析器语法中的数字。匹配后,检查(在您的解析器语法中)字段的“宽度”是否正确。
示例语法:
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
: ' '+
;
即不匹配的字符的固定数目的,但任意数量(> 0)。 – 2010-04-21 11:20:22