[antlr-interest] Template Rewrite Rule consumes one more Token than expected
Felix Dorner
felix_do at web.de
Tue Apr 22 03:53:01 PDT 2008
Gavin Lambert wrote:
> At 10:04 22/04/2008, Felix Dorner wrote:
> >a) The tree parser does not have to re-insert anything in to the
> >token stream, because not hooking a token into the tree does not
> >imply that it's deleted from the input token stream.
>
> No, but the token stream is only input to the parser, not the tree
> parser. It's totally irrelevant to the tree parser, as far as I
> know. (But maybe you're doing something I don't know about -- see
> below.)
Yeah, I guess I do something different. Because the excluded tokens are
not visible to the tree parser, I shouldn't be able to replace them in a
rewriter that
only sees the AST.
> >grammar Test;
> >options{output=AST;ASTLabelType=CommonTree;}
> >statement : (expression '!'!)* ;
> >expression : 'foo';
> >
> >tree grammar TestTree;
> >options{tokenVocab=Test;output=template;ASTLabelType=CommonTree;
> >rewrite=true;}
> >statement: expression*;
> >expression : 'foo' -> template(text={"bar"}) "<text>";
> >
> >Input "foo!foo!foo!" yields the output "bar!bar!bar!", the '!' are
> >still there... Contrary to the previous example.
>
> Ok, I have no explanation for that, if true. Unless that's something
> caused by the 'rewrite=true' option; I'm not familiar with that one.
The "rewrite=true" says that I don't want to create a completely new
output, but to indicate that I want to barely change _some_ of the
original tokens in
the stream. If I do this in a parser, the parser should of course only
be able to access parts of the original token stream, namely those
tokens that are hooked into the tree. It's like shooting a bunch of
bullets through a wall. I can now spray some color at the wall behind,
but only at where the holes are. My first example also sprayed "around
the corner", which seems fishy to me.
Felix
More information about the antlr-interest
mailing list