[antlr-interest] Spaces issues

Fabien Hermenier hermenierfabien at gmail.com
Mon Mar 28 23:47:08 PDT 2011


Hi

I starting to use ANTLR3 with AntlrWorks 3.4.1 on OS X and I have some 
issues with spaces. I've attached a sample antlr file describing my 
grammar (see 1st grammar)

I'm trying to test 'litteralRange'. So using the interpreter, I write 
"[2 ..3]" or "[2 .. 3]" as input and it works fine. However, if I give 
the string "[2..3]" it does not
work. I have followed the tutorial and declare the Lexer WS with the 
channel hidden to ignore spaces, but I still have strange issues with this.

Another strange fact is that if I write a reduced grammar that just 
isolate the rule I want to test, it is fine (see 2nd grammar).

Does anyone have a solution or a hint ?

Regards
Fabien.

--- 1st grammar ---
grammar ANTLRVJob5;

options {
     language = Java;
     output = AST;
}
fragment Digit :'0'..'9';
fragment Letter    :'a'..'z'|'A'..'Z';
fragment HexDigit : (Digit|'a'..'f'|'A'..'F');
fragment HexPrefix: '0x'|'0X';
fragment HexNumber: HexPrefix HexDigit+;
fragment OctNumber: '0' Digit+;
fragment DecNumber: '0'|'1'..'9'Digit*;
fragment Integer: HexNumber|OctNumber|DecNumber;
fragment Name    : Fqdn;/*Letter(InnerContent*(Digit|Letter))?;*/
fragment VarPrefix: '$';
fragment EnumSep: ',';
fragment Fqdn: Domain ('.' Domain)*;
fragment Domain: Letter ('-'?(Letter|Digit))*;
fragment InnerContent:    (Letter
             |Digit
             |'_'
             |'-'
             |'.'(Letter|Digit));
fragment RRange: ']' (InnerContent*(Letter|Digit))?;
fragment LRange: (Letter (Digit|Letter|'-'|'_'|'.')*)? '[';


INTEGER    : Integer;
NAME: Name;
ENUMSEP: EnumSep;
EQUALS    :    '=';
ENDL    :    ';';
PLUS    :    '+';
MINUS    :    '-';
TIMES    :    '*';
VARIABLE:    VarPrefix(Letter|'_')(Letter|Digit|'_')*;

COMMENT
     :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
     |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
     ;

WS    :    ('\n'|'\r'|'\t'|' ') {$channel=HIDDEN;};


INNERCONTENT: InnerContent+;
RRANGE:RRange;
LRANGE: LRange;
LVRANGE: VarPrefix LRange;
CONSTRAINTIDENTIFIER: Letter(Letter|Digit|'_')*'(';

litteral:    NAME|INTEGER;
operator:    PLUS|TIMES;

litteralRange:    '[' INTEGER '..' INTEGER ']';

litteralEnum:    LRANGE INNERCONTENT /*(ENUMSEP INNERCONTENT)+']'  RRANGE*/;

variableEnum: LVRANGE INNERCONTENT (ENUMSEP INNERCONTENT)+  RRANGE;
variableRange: LVRANGE INTEGER '..' INTEGER RRANGE;

explodedSet:('{}'| '{'expression (ENUMSEP expression)*'}');

atom    :    '(' expression ')'
         |litteralRange
;


expression: atom/* (operator expression)?*/;

var_decl:    VARIABLE EQUALS expression ';';

instruction:    var_decl;

vjob_decl:    instruction*;
---

--- 2nd grammar ---
grammar some;

COMMENT
     :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
     |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
     ;

WS  :   ( ' '
         | '\t'
         | '\r'
         | '\n'
         ) {$channel=HIDDEN;}
     ;
fragment Digit :'0'..'9';
fragment HexDigit : (Digit|'a'..'f'|'A'..'F');
fragment HexPrefix: '0x'|'0X';
fragment HexNumber: HexPrefix HexDigit+;
fragment OctNumber: '0' Digit+;
fragment DecNumber: '0'|'1'..'9'Digit*;
fragment Integer: HexNumber|OctNumber|DecNumber;

INTEGER    : Integer;
litteralRange:    '[' INTEGER '..' INTEGER ']';
//litteralRange:    '[' INTEGER '..' INTEGER ']';
---



More information about the antlr-interest mailing list