[antlr-interest] Selective ignoring of whitespace
Ratul Bhadury
hola.ratul at gmail.com
Tue May 19 02:12:02 PDT 2009
Thanks so much Michael :)
That worked perfectly. I wouldn't yet know if its the best approach or not,
but it works as I want it to, so I'm more than satisfied! I'll read up more
on syntactic predicates.
If it helps others, this is what Michael proposed...
grammar Space;
@members {
public static void main(String[] args) throws Exception {
SpaceLexer lex = new SpaceLexer(new ANTLRStringStream("sec = fooz,
foo z foofooz"));
CommonTokenStream tokens = new CommonTokenStream(lex);
SpaceParser parser = new SpaceParser(tokens);
try {
parser.clause();
} catch (RecognitionException e) {
e.printStackTrace();
}
}
}
clause : keyword_clause EOF;
keyword_clause
:
keyword_field { System.out.println($keyword_field.text);} EQ
search_term_list
;
keyword_field: KEYWORD_SEC | KEYWORD_CP ;
search_term_list : search_term (',' search_term)* ;
search_term: KEYWORD {System.out.println($KEYWORD.text);} ;
fragment KEYWORD_SEC: 'sec';
fragment KEYWORD_CP: 'cp';
fragment KEYWORD: CHAR (CHAR | ' ')* ;
ALL_KEYWORD:
( (KEYWORD_SEC WS* EQ) => KEYWORD_SEC { $type = KEYWORD_SEC; }
| (KEYWORD_CP WS* EQ) => KEYWORD_CP { $type = KEYWORD_CP; }
| (KEYWORD) => KEYWORD { $type = KEYWORD; }
)
;
EQ : '=';
fragment CHAR :
ALPHA_UC|ALPHA_LC|
DIGIT|'$'|'£'|'&'|'^'|'%'|'('|')'|'['|']'|':'|';'|'*'|'<'|'>'|'/'|'\\'|'@'|'#'|'?'|'!'|'.';
fragment ALPHA_UC : 'A'..'Z';
fragment ALPHA_LC : 'a'..'z';
fragment DIGIT : '0'..'9';
WS : (' ' | '\t')+ {$channel=HIDDEN;}
;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090519/89bf08b7/attachment.html
More information about the antlr-interest
mailing list