[stringtemplate-interest] [ST4] How to avoid map key iteration?
Udo Borkowski
ub at abego-software.de
Mon Feb 14 23:22:14 PST 2011
Hi Jamie,
> I ran into this problem a while back on Java and I just hacked ST so it wouldn't iterate Maps.
thanks for your post. Good to know I am not the only one running into this issue ;-)
Udo
On 15.02.2011, at 06:29, James Briant wrote:
> I ran into this problem a while back on Java and I just hacked ST so it wouldn't iterate Maps.
>
> Jamie
>
> On Mon, Feb 14, 2011 at 8:01 AM, Udo Borkowski <ub at abego-software.de> wrote:
> Hi Sam,
>
> your suggestion of using a syntax like "line2(adr)" to invoke an anonymous template goes exactly in a direction I was thinking for a while now:
>
> (Start of dreams of the future)
>
> The "Unified ST4 template" syntax
>
> Currently we defined "normal" templates like
>
> t1(p1,p2) ::= <<…>>
>
> or
>
> t1(p1,p2) ::= "…"
>
> Anonymous templates (or sub templates) are defines like
>
> {p1,p2| …}.
>
>
> What about defining a "normal" template like this:
>
> t1 = {p1,p2| …}
>
> I.e. a "normal" template is just an anonymous template with a name, i.e. the template can be referenced through this name.
>
> To invoke a template use the same syntax as before:
>
> <t1(x,y)>
>
> However one can also just *reference* a template (without invoking it), just by naming it without the (...).
>
> The "iterate" feature would work on a (named or anonymous) template (as now), but would get a slightly different syntax for named templates:
>
> <x,y:t1>
>
> I.e. no "t1()" as with a template invocation, but just "t1" to reference the template. This perfectly fits into the "<x,y:{…}>" syntax: here the "{…}" is not written as "{…}()", too.
>
> This changed syntax also makes the difference between a normal template call:
>
> <t2()>
>
> and the iterate feature:
>
> <x,y:t1>
>
> a little bit more obvious. (Another way to see this: the () behind the template name in an iterate feature serve no real purpose, they will always be empty).
>
> To come back to my initial question "how to avoid map key iteration" I could imagine an extension to the "iterate" syntax:
>
> Either
>
> <x*,y:t1>
>
> Meaning: only the x parameter is used as an iterator, the other parameters are just passed to the template unchanged.
>
> Or
>
> <x,y!:t1>
>
> Meaning: every parameter not marked with "!" is used as an iterator.
>
> ( '*' and '!' are just used as examples. Use your favorite syntax here to mark a parameter either as "iterator" or as "pure value").
>
>
> (End of dreams of the future)
>
>
> Udo
>
>
> On 14.02.2011, at 15:35, Sam Harwell wrote:
>
>> Hi Udo,
>>
>> The problem is the operation in use when you write it the way you originally did – the ‘:’ is a map operation as opposed to a pass to a function method. In theory, the following syntax could solve the problem:
>>
>> t2(adr,line2={x|<x.zip> <x.city>}) ::= <<
>> <adr.firstname> <adr.lastname>
>> <line2(adr)>
>> >>
>>
>> I know this syntax doesn’t work in ST3, and I’m guessing it doesn’t in ST4 either. Considering the way parameters and local variables work in many languages, I don’t think allowing this would be unexpected.
>>
>> Sam
>>
>> From: Udo Borkowski [mailto:ub at abego-software.de]
>> Sent: Monday, February 14, 2011 3:21 AM
>> To: Sam Harwell
>> Cc: stringtemplate-interest List
>> Subject: Re: [stringtemplate-interest] [ST4] How to avoid map key iteration?
>>
>> Hi Sam,
>>
>> If you write it this way:
>> ...
>> <t2(adr=p,line2={<adr.city>, <adr.zip>})>
>>
>> Good point.
>>
>> I guess it is just my personal style (and background) that makes me raise the issue. Inside a subtemplate I'd prefer to access the parameters of the subtemplate (the {p1,p2|…}) over the access of something outside of the subtemplate, especially with the dynamic name lookup of ST4 in mind.
>>
>>
>> Udo
>>
>
>
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/stringtemplate-interest/attachments/20110215/188197ad/attachment.html
More information about the stringtemplate-interest
mailing list