[stringtemplate-interest] Anonymous template inside another anonymous template
Morten Olav Hansen
mortenoh at gmail.com
Fri Dec 3 04:16:15 PST 2010
Hi again. I'm sorry, but I'm not sorry if I fully understand.
So exactly how would I generate the path component from the model? Are
you talking about creating a list in the grammar, and then adding the
path-components to this list during parsing? (and then use this
component as a argument to the template...?)
Regards,
Morten
On Fri, Dec 3, 2010 at 2:50 AM, Terence Parr <parrt at cs.usfca.edu> wrote:
> ok, got it. So, your model should walk the tree or whatever you get for the region input. It creates a template which is a list of the flattened elements. The trick is the model not the templates compute the path from root to element. I do this for tree of imported grammars in antlr. Then, the templates are braindead simple:
>
> region(path, i) ::= << region <path; separator="_">_r<i> >>
> state(path) ::= << region <path; separator="_">_s >>
>
> I'm presuming that the model computes the path as a list of names.
>
> Ter
>
> On Dec 2, 2010, at 5:06 PM, Morten Olav Hansen wrote:
>
>> Hi! Yes, of course.
>>
>> I'm extending Java 1.5 with UML State Machine support, and is using
>> the ANTLR3 TokenRewriteStream to rewrite the source from my extended
>> version, to a version of Java that is compilable. I'm doing this, so
>> that I can only rewrite the parts I need, and just grab the text of
>> the rest.
>>
>> So my input is usually like this:
>>
>>
>> class ABC {
>> region {
>> state s {
>> region {
>> state s { regions, etc }
>> }
>>
>> region {
>> state s { regions, etc }
>> }
>> }
>>
>> /* normal javacode below here */
>> }
>>
>> And I want it flattened to something like this (very simplified, the
>> names are the important part here)
>>
>> class ABC {
>> private _construct_sm() {
>> region r0;
>> state r0_s;
>> region r0_s_r0;
>> state r0_s_r0_s;
>> region r0_s_r1;
>> state r0_s_r1_s;
>> }
>>
>> /* more javacode below */
>> }
>>
>> I was using a prefix argument to create the names of the variables,
>> but I'm facing the problem outlined before.
>>
>> The general setup of my templates are like this:
>> KEYWORD_builder(keyword, prefix) ::= <<
>> generate text for template here, and if calling another template, add
>> something to the prefix.
>>>>
>>
>> I can solve this changing prefix to keyword_prefix, but this quickly
>> stops working because of recursion (when the same template is called
>> several times).
>>
>> Regards,
>> Morten
>>
>> On Fri, Dec 3, 2010 at 1:33 AM, Terence Parr <parrt at cs.usfca.edu> wrote:
>>> Howdy. Can you explain more at the high level of what you're trying to do? are you passing down a recursion chain a bigger and bigger arg?
>>>
>>> I'm finding now that when I want recursion, i'm walking the model with the template; less good. I recurse or traverse my model and build a tree of embedded templates rather than having the template invoke itself.
>>>
>>> Ter
>>> On Dec 2, 2010, at 2:52 PM, Morten Olav Hansen wrote:
>>>
>>>> After more digging around, it seems that the problem is that i have
>>>> recursive templates with the same arguments.
>>>>
>>>> Something like this fails:
>>>> a(prefix) ::= <<
>>>> <b(prefix={added_<prefix>}>
>>>>>>
>>>>
>>>> b(prefix) ::= <<
>>>> <prefix> ...
>>>>>>
>>>>
>>>> but using b_prefix instead works fine.
>>>>
>>>> The problem I'm facing is that I have recursion, and I can't create a
>>>> template for every possible level.
>>>>
>>>> Any suggestions on how to fix this?
>>>>
>>>> Regards,
>>>> Morten
>>>>
>>>> On Thu, Nov 25, 2010 at 9:44 PM, Morten Olav Hansen <mortenoh at gmail.com> wrote:
>>>>> Hi
>>>>>
>>>>> Is it possible to have an anonymous template inside another template
>>>>> somehow? I'm trying to generate an argument to a template (which is
>>>>> called from an anonymous template).
>>>>>
>>>>> I have something like this:
>>>>>
>>>>> <r.states: {s|<state_builder(state=s, region_ns={r<region_n>})>}>
>>>>>
>>>>> But i get an exception:
>>>>> Exception in thread "main" java.lang.IllegalArgumentException: cannot
>>>>> embed template <anonymous template argument> in itself
>>>>>
>>>>> I'm just passing region_ns=region_n now and adding the r on the
>>>>> template side (and this works), but this argument will potentially
>>>>> have several arguments concatenated together.
>>>>>
>>>>> Regards,
>>>>> Morten
>>>>>
>>>> _______________________________________________
>>>> stringtemplate-interest mailing list
>>>> stringtemplate-interest at antlr.org
>>>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>>
>>>
>
>
More information about the stringtemplate-interest
mailing list