[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