Hi everyone!
I'm writing a language transformator based on AntLR and I'm running  
into some problems:
In order to transform conditional statement my parser constructs the  
following AST:

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

<<inline: condition AST.png>>



In my Tree Grammar I'm having some problems with the multiple ELSEIF  
nodes.

I try to map the conditional statement to StringTemplate with the  
following rule:
cond    :       ^(IF
                        ^(CONDITION conds+=condExpression)
                        ^(THEN thens+=expression)
                        ^(ELSEIF
                                ^(conds+=CONDITION condExpression)
                                ^(thens+=THEN expression)
                        )*
                        ^(ELSE else=expression)?
                )
                ->       
conditional(conditions={$conds.st},thens={$thens.st},else={$else.st})
                ;

The first problem I'm running into is that '?' and '*' seem to be not  
allowed in tree grammars. I could split the rule into a rule that  
contains an else and one without. This works for ELSE, but I think  
it's not really applicable to ELSEIF as this would lead to very many  
alternative rules.
The second problem is the application of the StringTemplates in the  
Rewrite rule. The forwarding to the expression StringTemplate works  
perfect. However applying the conds.st and thens.st to the multi- 
valued attributes leads to compiler errors as the templates do not  
accept a multi-valued attribute and so does not descend into the rules  
responsible for rendering the expressions.

Does anyone have a solution to the problems or perhaps recommend   
another approach for tackling this task?

Regards,
Florian Barth

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

Reply via email to