Thank You, again

Sadly this leads me to some serious misunderstandings. My main job is
computing using
Maxima and Fortran, so this is all a bit too new for me. A
example-by-example is all I need.
Let me present You a complete simple grammar and template:
----
grammar TestGrammar;

options {
  output = template;
}

prog 
        : statement+
        ; 

statement
        : assign
        | print
        ;

assign
        :ID ':=' INT ';' -> assign(x={$ID.text},y={$INT.text})
        ; 

print
        : 'toScreen' '(' STRING ')' ';' -> print(string={$STRING.text})
        ;

ID: 'a'..'z' + ;
INT:'0'..'9' + ;
STRING: (ID|INT)+ ;
-----

and templates:

----
group TestTemplate;

assign(id,int) ::= "<id> = <int>"
print(string) ::= "print <string>"
----

What do I need to add to get translated result from parser.prog() ?

George

Jim Idle <[email protected]> wrote on 27 May 2010, 05:00 PM:
Subject: Re: [antlr-interest] parsing rules
>
>
>> -----Original Message-----
>> From: [email protected] [mailto:antlr-interest-
>> [email protected]] On Behalf Of George Soom
>> Sent: Thursday, May 27, 2010 3:52 AM
>> To: [email protected]
>> Subject: Re: [antlr-interest] parsing rules
>> 
>> Thank You,
>> 
>> now I understand my mistake. However, can You give me a bit bigger
>> example?
>
>OK. I use this (all the time ;-):
>
>statements
>    :   s+=statement*
>
>        // The list of statements just needs to go on up the chain, but we
>        // still use a template in our template group in case we ever
>        // wish to adorn statements with something or the target changes
>        //
>        -> statements(stats={$s})
>    ;
>
>Then a template of:
>
>statements(stats) ::= <<
><stats: {<it>}; separator="\n">
>>>
>
>(Sometimes you will need to iterate, sometimes not, depending on what you
>did lower down the chain. 
>
>Other constructs are:
>
>    |   COMMENT                 
>            {
>                // Get rid of leading spaces and the ' character, generate
>the comment line
>                //
>                $st =
>%lineComment(comment={$COMMENT.text.trim().substring(1)});
>            }
>
>To use a template within an action.
>
>And:
>
>        {
>            // Ask the code generator to deal with the assignment
>            //
>            $st = codeGen.assign($v.st, $v.symbol, $expression.st,
>$expression.symbol, $expression.type);
>        }
>
>To call a method that returns a template (or List).
>
>And:
>
>       :       ^(CALL
>
>            id=IDENTIFIER
>            {
>                $st = %({$id.text})();
>
>                f = (Function)localSymbols.lookup($id.text);
>                %{$st}.instr=f.getInstruction();
>
>                argNum = 0;
>            }
>
>...
>
>
>To instantiate a template, the name of which is held in some String.
>
>
>Jim
>
>
>
>
>
>
>
>List: http://www.antlr.org/mailman/listinfo/antlr-interest
>Unsubscribe:
>http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to