Related articles |
---|
Should this be done in Bison or by post-processing of the AST? drewpvogel@gmail.com (eyeris) (2007-11-08) |
Re: Should this be done in Bison or by post-processing of the AST? DrDiettrich1@aol.com (Hans-Peter Diettrich) (2007-11-09) |
Re: Should this be done in Bison or by post-processing of the AST? jo@durchholz.org (Joachim Durchholz) (2007-11-09) |
Re: Should this be done in Bison or by post-processing of the AST? drewpvogel@gmail.com (eyeris) (2007-11-12) |
From: | eyeris <drewpvogel@gmail.com> |
Newsgroups: | comp.compilers |
Date: | Thu, 08 Nov 2007 21:42:25 -0800 |
Organization: | Compilers Central |
Keywords: | parse, AST, question |
Posted-Date: | 09 Nov 2007 01:44:17 EST |
I am writing a parser for a rather unconventional language. It is used
to process text, with commands enclosed in braces. The if construct is
a command, rather than a syntactical construct. Here is an example:
> Answer: I'm going to the [if month eq <12>]ski lodge[else]park[endif].
My parser deals with this example just fine. However this language has
a [endif all] command that closes all open [if] blocks. Here is
another example:
> Answer: [if show_answer eq <1>]I'm going to the [if month eq <12>]ski lodge[else]park[endif all].
In my current implementation, the resulting AST for the second example
would look like this:
text (Answer: )
if (show_answer eq <1>)
text (I'm going to the )
if (month eq <12>)
text (ski lodge)
else
text (park)
text (.)
However the text block containing the period *should* be a child of
the root text node (containing the text Answer:). Since this is a
logical issue and not really a parsing issue, it seems like the
easiest way to remedy this is by creating a new node type for the
[endif all] command and then manually expand those nodes into normal
[endif] nodes, moving the siblings following the [endif all] node out,
making them sibling of the [endif all] node's parent after the parsing
is complete.
However this also seems like a problem that many people have solved
before, probably finding clever tricks in the process. Is there an
easy way to deal with this right in the Bison grammar file?
Return to the
comp.compilers page.
Search the
comp.compilers archives again.