2010-04-21 68 views
1

如何在antlr语法中指定一个固定的数字号码?ANTLR中的固定数字格式

我想解析一个包含固定数量字符的字段的行。每个字段都是一个数字。

0034 | 9056 | 4567 | 0987 | -2340 | +345 | 1000

以上这行是示例行。 |表示字段边界(它不会出现在实际的文件中,这里只是为了表示边界)。

的字段可以包含空白字符+/-

回答

-1

什么如下:

INT : ('+'|'-')? ('0'..'9')+; 
+0

即不匹配的字符的固定数目的,但任意数量(> 0)。 – 2010-04-21 11:20:22

1

我会保持词法语法尽可能简单,只是匹配零个或多个空格后跟可选符号后跟解析器语法中的数字。匹配后,检查(在您的解析器语法中)字段的“宽度”是否正确。

示例语法:

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 
    : ' '+ 
    ; 
相关问题