开发者

Fixed number format in ANTLR

How to specify a fixed digit number in antlr grammar?

I want to parse a line which contains fields of fixed number of characters. Each field is a number.

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

The above line is a sample line. | indicates field boundaries (which will not be in the actual file. shown here just to indicate the boundary).

开发者_开发百科The fields can include blank characters +/-


I'd keep the lexer grammar as simple as possible and just match zero or more spaces followed by an optional sign followed by a number in your parser grammar. After matching that, check (in your parser grammar) if the "width" of the field is correct.

An example grammar:

line
  :  field ('|' field)*
  ;

field
  :  Spaces? ('+' | '-')? Number // validate if 'field' is correct in this rule  
  ;

Number
  :  '0'..'9'+
  ;

Spaces
  :  ' '+
  ;

And a possible validation scheme could look like:

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
  :  ' '+
  ;


What about the following:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜