[antlr-interest] Newby - How to find rule context in the AST

Harris, Tobin tobin at tobinharris.com
Sun May 27 02:16:02 PDT 2007


Hi Folks,

 

This one's bugging me...

 

So far, everything I've read says that you don't need a big bloated
"parse tree" when evaluating your grammar. Instead, we have a more
concise AST that only contains the values. For example:

 

My top grammar rule looks a bit like this

uriformat = scheme '://' credentials? host path? query?

 

The AST outputs like this 

 

http  :// tobin : xyz @ someurl.com / blah

 

instead of  the parse tree, which is more like this

 

[scheme]

   http

://

[credentials]

  Tobin

  :

  xyz

  @

[host]

  Someurl.com

[path]

  /blah

 

The problem is, I want to be able to interrogate the tree to find out
if, for example, the [credentials] were parsed, and then loop through
the sub-nodes (username, password etc). Unfortunately the AST doesn't
contain this information. I can get the type of a node, but that will
only be a "DIGIT" or "INT" etc. 

 

Is there a way of retaining more of the parse tree? Am I missing
something here? 

 

I did see an example for Oracle URI where the author embeds Actions in
rules, and thought this might be a way to go...

 

{ #tnsnames_entry = #([TNSNAMES_ENTRY, "tnsnames_entry"],
#tnsnames_entry); }

 

However, actions get evaluated to the target language - C# in my case -
and I'm not actually sure what the above language is or what the code is
doing!?

 

Any help appreciated!

 

Tobin 

 

P.S - I started looking in to ANTLR as an alternative to RegEx, because
it just didn't seem like the right tool for the job. However, I was
hoping for an approach that didn't require a massive learning curve! Are
there any other tools that might fit my simple needs better?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20070527/c73c9010/attachment.html 


More information about the antlr-interest mailing list