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
