[antlr-interest] Re: ANTLR + StringTemplates = formattingTool?

birmanstefan birmanstefan at yahoo.com
Fri May 14 16:30:34 PDT 2004


First of all, thanks!

1. 
   I look forward using StringTemplates2.0b1.

2.
   I like the idea of using inline templates; it's more handy for the 
programmer. In my case, though, the user must have access to the 
template without digging in the grammar; so there should be an 
interface for the sake of those fancy users who want to customize them 
in their own extraterestrial way. This is why I was trying to use a 
"dynamic linking" of the node to it's template in the library (it's 
just a point).

4. 
   Indeed, "enumeration" issue seems to be a typical case of wrong 
defined problem. Thanks for the tip.

4.
   By saying "indent based upon the indentation of the attribute" did 
you mean that every attribute can be associated to an indentation 
level?

    Thanks,
           Stefan.

------------
    THIS IS NOT A MACHINE GENERATED MESSAGE. It's just a typical human 
communication sample. You may recognize it by the big number of 
grammar violations and ambiguous expressions.
------------
 
--- In antlr-interest at yahoogroups.com, Terence Parr <parrt at c...> 
wrote:
> On May 14, 2004, at 11:03 AM, birmanstefan wrote:
> >      I'm a newbie which dares to combine antlr and string 
templates to
> > get a formatting tool :).
> 
> Sounds great.  My new version of StringTemplate is about ready (just 
> have to do the doc).  It has autoindentation based upon the indent 
> level of attribute references themselves and has group file format 
that 
> is like an output grammar containing template definitions.  Saves 
> having to do multiple files.
> 
> First, you may find the following cabal (mainly the "cabal notes") 
> interesting:
> 
> http://www.antlr.org/workshop/cabal-2003/index.html
> 
> Our idea related to your below grammar is that you could associate a 
> template inline, or somehow related to the rulename that would 
generate 
> output for that rule.  Mostly the template would generate a result 
that 
> is returned etc...
> 
> Also of note is our dynamically scoped attributes (as suggested by 
> Monty) where you can set attributes defined in any invoking rule.
> 
> >  My basic idea is to have two kinds of AST
> > nodes : templatized (make use of a StringTemplate to format code) 
and
> > not templatized.
> >      Let's assume we have next g :
> >
> > rule_a :
> >    // templatized node
> >    #(RULE_A rule_b rule_c)
> >    {
> >       #rule_a.setTemplate("rule_a");
> >       #rule_a.setAttribute(rule_a_attrs, rule_a_values);
> >       System.out.println(#rule_a.getFormattedCode());
> >    }
> >    ;
> > rule_b :
> >    // templatized node
> >    #(RULE_B .....)
> >    {
> >       #rule_b.setTemplate("rule_b");
> >       computeSomeMoreCodeForRuleBAttributes();
> > 	#rule_b.setAttribute(rule_b_attrs, rule_b_values);
> >       	sendToRuleA(#rule_b.getFormattedCode());
> >    }
> >    ;
> > rule_c :
> >    // templatized node
> >    #(RULE_C ....)
> >    {
> >      computeCode();
> >      sendToRuleA(computedCode);
> >    }
> >    ;
> >
> >    Methods setTemplate() and setAttribute() are just some API to 
work
> > with StringTemplates. The node in this case behaves as adapter to
> >  StringTemplate. How I compute code or send code between rules is 
also
> > not important right now.
> >
> >    There are few points to discuss. First of all is the number of
> > templates : at worst is equal to number of rules; this may imply a 
lot
> >  of maintainance effort.
> >
> >    A second one is about automation. It would be nice to say
> > something like :
> >
> > rule_a:
> >       { #rule_a.activateTemplate = true; }
> >      #(RULE_A.....)
> >
> > and the node automatically associate a template called "rule_a"; 
is
> > there a way to access rule name (because it's unique) from an AST
> > node?
> 
> Nothing exists currently...this will all be defined after I get 
basic 
> parsing working for ANTLR 3.0 :)
> 
> >      A third issue is related to context. Let's say I have an
> > enumeration "[a, b, c]"; if it's in a method result context I want 
to
> > use a "," as separator, while if it's in a different context use a
> > "\n  ," separator. Is there a way to define rule aspects?
> 
> You should return the list of elements (which of course could be 
> templates themselves as for statements etc...) and then whoever 
decides 
> to embed that list can specify the separator.  Keep everything as 
lists 
> of items as long as possible and only render to string (using 
> separators) when necessary.
> 
> >      The n-th issue :D is related to indentation. I thought of
> > including in each node an indentation level (an int). The problem 
is
> > that for some nodes I would like to increment it while for others 
to
> > keep it constant. Is there a way to pass the indentation level 
down
> > the AST, during AST construction? or to choose constructor on the 
fly
> > (based on rule context or other parameters)?
> 
> Could do during AST construction or choose on the fly during the 
tree 
> walk.  The current default behavior for StringTemplate 2.0b1 is to 
> indent based upon the indentation of the attribute.  FOr example, 
(from 
> a group file format):
> 
> method(name,type,stats) : <<
> public $type$ $name$() {
>      $stats; separator=";\n"$
> }
>  >>
> 
> which would automatically indent anything generated from stats with 
4 
> spaces.
> 
> Ter
> --
> Professor Comp. Sci., University of San Francisco
> Creator, ANTLR Parser Generator, http://www.antlr.org
> Cofounder, http://www.jguru.com
> Cofounder, http://www.knowspam.net enjoy email again!
> Cofounder, http://www.peerscope.com pure link sharing



 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
     http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
     antlr-interest-unsubscribe at yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
     http://docs.yahoo.com/info/terms/
 



More information about the antlr-interest mailing list