Hello Andy,

Here is an example of doing this with stringtemplate v3:

// A function call with comma-delimited list of args
call(name, args) ::= <<
<name>(<args; separator=", ">)
>>

You can see this usage on the stringtemplate cheat sheet:
http://www.antlr.org/wiki/display/ST/StringTemplate+cheat+sheet

Michael


On 28 October 2011 09:26, Voelkel, Andy <[email protected]> wrote:
> Hi,
>
> I'm developing tools for generating various C source files from a simple DSL. 
> I've got the lexing/parsing/tree-creation part of it working to my 
> satisfaction, and am comfortable with my level of understanding (though I 
> will continue to work my way all the way through Terence's book). But I'm 
> confused about the best approach to generating one of the output files I 
> need, which should look like this:
>
> toplevel name = {
>  { // begin group1
>    { // begin block1
>      item 1,
>      item 2
>    }, // end block1
>    { // begin block2
>      item 1,
>      item 2
>    } // end block2
>  }, // end group1
>  { // begin block3
>    item 1,
>    item 2,
>    item 3
>  }, // end block3
>  { // begin group2
>    { // begin block4
>      item 1,
>      item 2
>    }, // end block4
>    { // begin block5
>      item 1,
>      item 2
>    } // end block5
>  } // end group2
> };
>
> The problem is putting the "," characters on all elements in the nested 
> structure except for the last one at that level, and I'm wondering what the 
> best approach to the problem is. It seems like I could pass a "last one" 
> parameter down to subrules when the item invoking the subrule is the last in 
> the list of a rule, and use that as a way to avoid printing the ",". 
> Alternatively, I get the feeling that this could be handled by the right 
> StringTemplate magic, but I haven't found the right StringTemplate tutorials 
> to get comfortable with this problem, which is obviously recursive, and where 
> the items in a list are not all of the same type. The toplevel structure can 
> contain groups or blocks, and groups can contain other groups:
>
> group: 'group'^ ID '{'! (block | group)+ '}'! ;
> block: 'block'^ ID '{'! (assign)+ '}'! ;
>
> What would be the right way to get the output I'm looking for?
>
> - Andy
>
> ________________________________
>
> CONFIDENTIALITY NOTICE: This e-mail transmission, and any documents, files or 
> previous e-mail messages attached to it, may contain information that is 
> confidential and/or legally privileged. If you are not the intended 
> recipient, or a person responsible for delivering it to the intended 
> recipient, please DO NOT disclose the contents to another person, store or 
> copy the information in any medium, or use any of the information contained 
> in or attached to this transmission for any purpose. If you have received 
> this transmission in error, please immediately notify the sender by reply 
> email or at [email protected], and destroy the original transmission 
> and its attachments without reading or saving in any manner.
>
> For further information about Plantronics - the Company, its products, 
> brands, partners, please visit our website www.plantronics.com.
>
> 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