[antlr-interest] CommonTree & Tree grammar versus DIY

Gerald Rosenberg gerald at certiv.net
Fri Aug 22 13:31:28 PDT 2008


At 11:07 AM 8/21/2008, Terence Parr wrote:

>Yep.  I'm now in favor of manipulating the text instead and
>regenerating the AST for the altered position. Tree manipulation is
>fraught with danger

parse text -> new AST -> ... -> scan AST -> modify text -> repeat

Avoids rewrites entirely.  Nice . . . except where other 
tools/elements are dependent on the AST instance.

For example, in Eclipse, the Java AST is used as the model for the 
code outline view, as the basis for the dependency analysis, 
incremental compilation, and on-the-fly error marking, is referenced 
from the code assist and JavaDoc excerpt resolvers, etc.  Incremental 
AST changes are propagated to listeners with the dependent 
tools/elements figuring out what they need to do to maintain 
integrity and update the display as needed.

If the AST instance is invalidated, say by a complete replacement, 
everything gets recomputed, which is non-trivial and often noticeable 
at the UI level.  Maybe could use an AST delta-detect/delta-apply 
step rather than completely replacing the AST?  Still, a lot of 
overhead if you have to do it in response to every interactive change 
made to the source text.

Even where fraught with danger, sometimes mucking around in the AST 
is the better (or least bad) thing to do.

>>For ad-hoc AST changes, the better approach, at least conceptually,
>>is to implement a low-level structural modification API  with
>>methods to "find" a node based on parameter values, and to similarly
>>create, copy, insert and delete nodes.
>
>Sort of like my TreeWizard that I started.

TreeWizard addresses the situation where you don't have or don't want 
to be bothered with a formal model definition.  The API enables the 
programmer to build-up and manipulate a tree: any tree structure and 
any manipulation, including really bad ones, are allowed.

If you do have a formal model, then you can use the Antlr 
lexer/parser to ensure a valid tree construction.  And if you use an 
Antlr access grammar, you can generate a programmer API that has 
in-built knowledge of that specific model structure and that includes 
protections against doing at least some "loopy" things.

So, yes, "AntlrAccess" would generate a somewhat TreeWizard-like API 
package automatically tailored to a given formal model.





More information about the antlr-interest mailing list