[antlr-interest] Please, help to write a tree walker
Ламер
Gogi66 at yandex.ru
Mon May 24 01:44:36 PDT 2010
Hi, can you help me to write Tree grammar.
ClassCastException is thrown while my Test runs.
Here is the code of Combined grammar and Tree grammar that doesn't work.
Combined grammar:
--------------------------------------------------------------------------------------------------------------------------------
grammar MetaDataExtractor;
options {
language = Java;
output = AST;
ASTLabelType = CommonTree;
}
tokens {
TOKEN;
VAR;
CR;
SAVE;
NEWLINE;
LIST;
}
/* PARSER RULES */
template
: operator*
list
operator*
EOF!
;
list
: l='[#list]'
operator*
save
'[/#list]'
-> ^(LIST[$l, "LIST"] operator* save)
;
operator
: token
| variable
| cr
;
token
: ( t=WORD
| t=NUMBER
| t=ID
| t=SYMBOL
| t=STRING_LITERAL
) -> ^(TOKEN $t)
;
variable
: VARIABLE -> ^(VAR VARIABLE)
;
cr
: '[#cr/]' -> ^(CR NEWLINE)
;
save
: '[#save'
'filename=' fname=STRING_LITERAL
'template=' tpath=STRING_LITERAL
'/]'
-> ^(SAVE $fname $tpath)
;
/* LEXER RULES*/
fragment LETTER : ('a'..'z' | 'A'..'Z') ;
fragment DIGIT : '0'..'9' ;
NUMBER : DIGIT+ ;
WORD : LETTER+ ;
ID : LETTER (LETTER | DIGIT)+ ;
SYMBOL : '!' | '#'..'/' | ':'..'@' | '['..'`' | '{'..'~' ; // without quote
//SYMBOL : '!'..'/' | ':'..'@' | '['..'`' | '{'..'~' ; // with quote
VARIABLE : '${' WORD '}' ;
WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;} ;
MULTILINE_COMMENT : '[#--' .* '--]' {$channel = HIDDEN;} ;
STRING_LITERAL
: '"'
{ StringBuilder b = new StringBuilder(); }
( c=~('"' | '\r' | '\n'/* | VARIABLE*/) { b.appendCodePoint(c); }
)*
'"'
{ "\"" +setText(b.toString()) + "\""; }
;
--------------------------------------------------------------------------------------------------------------------------------
tree grammar MetaDataExtractorWalker;
options {
language = Java;
tokenVocab = MetaDataExtractor;
ASTLabelType = CommonTree;
}
// COPIED FROM PARSER
template
: operator*
list
operator*
;
list
: ^(LIST operator* save)
;
operator
: token
| variable
| cr
;
token
: ^(TOKEN WORD)
| ^(TOKEN NUMBER)
| ^(TOKEN ID)
| ^(TOKEN SYMBOL)
| ^(TOKEN STRING_LITERAL)
;
variable
: (VAR VARIABLE)
;
cr
: ^(CR NEWLINE)
;
save
: ^(SAVE STRING_LITERAL STRING_LITERAL)
;
And here is TreeParser grammar:
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
More information about the antlr-interest
mailing list