[antlr-interest] Need help on constructing trees
Mo
m.axmed at gmail.com
Fri Jul 14 10:07:08 PDT 2006
sorry accidently hit send too early..
any how that psuedo code works for me,
cheers
mo
On 7/14/06, Mo <m.axmed at gmail.com> wrote:
> Hi kototama,
>
> assuming that you want your code to look like:
>
> public foo (blah) {
>
> method methodName(blah) {
> }
>
> }
>
>
> then the following will build a tree for you
>
> ----
> the lexer
>
>
> LPREN : '(';
> RPREN : ')';
> LBRACE : '{';
> RBRACE : '}';
> COMMA : ',';
> SEMI : ';';
>
> IDENT
> options {testLiterals=true;}
> : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')* ;
>
> NUMBER options {testLiterals=true;}
> : ('0'..'9')+ ('.' ('0'..'9')*)? | '.' ('0'..'9')+;
>
> STRING
> : '"' ( EscapeSequence | ~('\\'|'"') )* '"' ;
>
> EscapeSequence
> : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') ;
>
>
> ----------
>
> the parser
>
> public_section
> :
> "public"^ IDENT LBRACE! (method )* RBRACE!
> ;
>
> method
> : "method"^ IDENT LPREN arguments RPREN
> LBRACE!
> (var_decl)*
> RBRACE!
> ;
>
> atom
> : INIT_VALUE
> | IDENT
> | STRING
> ;
>
> arguments
> : (atom (COMMA! atom)*)
> ;
>
>
>
>
>
> On 7/14/06, kototama kototama <kototamo at gmail.com> wrote:
> > Hi,
> >
> > Here is an extract of my grammar for a tiny programming language :
> >
> > public_section!: PUBLIC LBRACE v:var_decl_list m:method_def_list RBRACE
> > {#public_section = #( [PUBLIC_SECTION, "public_section"],
> > #([VAR_DECLS,"var_decls"], v) , #([METHOD_DEFS, "method_defs"], m) );}
> > ;
> >
> > var_decl_list: (var_decl)*
> > ;
> >
> > var_decl!: LET t:type i:id (ASSIGN v:value)? EOS
> > { #var_decl = #([VAR_DECL, "var_decl"], t, i, #([INIT_VALUE, "value"],
> > v)); }
> > ;
> >
> > I would like to simplify the public_section like this :
> >
> > public_section!: PUBLIC LBRACE (v:var_decl)* m:method_def_list RBRACE
> >
> > to avoid the definition of var_decl_list. Is it possible ? I don't find the
> > correct way to build the tree ("var_decls" contains only the last definition
> > if I do so).
> >
> > Thanks in advance for your help!
> >
>
More information about the antlr-interest
mailing list