[antlr-interest] Please, help to write a tree walker
Ламер
Gogi66 at yandex.ru
Mon May 24 01:55:51 PDT 2010
I forgot to put sample input
here it is:
--------------------------------------------------------------------------------------------------------------------------------
, \ some text
[#list]
${first} < ${edition} , ${channel}
[#save filename="fname" template="templ" /]
[/#list]
, \ some text
--------------------------------------------------------------------------------------------------------------------------------
-------- Пересылаемое сообщение --------
24.05.10, 12:44, "Ламер" <Gogi66 at yandex.ru>:
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:
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
-------- Завершение пересылаемого сообщения --------
--
Яндекс.Почта. Письма есть. Спама - нет. http://mail.yandex.ru/nospam/sign
More information about the antlr-interest
mailing list