[antlr-interest] AST rewrite infinite loop
Bill Andersen
andersen at ontologyworks.com
Wed Oct 14 15:46:23 PDT 2009
On Oct 14, 2009, at 16:38 , John B. Brodie wrote:
> Greetings!
>
> On Wed, 2009-10-14 at 16:15 -0400, Bill Andersen wrote:
>> FYI, all. The problem described does NOT occur without rewrite =
>> true
>>
> Isn't rewrite = true for Tree grammars only? -- your rule below looks
> like a Parser rule to me - altho can't really tell for sure...
Nah, it's a tree grammar, 'sentence' bundles up a bunch of different
AST patterns for sentences, like
sentence
: ^(ATOM term+)
| ^(IMPL sentence sentence)
| ...
;
>> On Oct 14, 2009, at 11:20 , Bill Andersen wrote:
>>
>>> Hi folks
>>>
>>> I have this production
>>>
>>> assertion
>>> : sentence -> ^(ASSERTION NAME["foo"] sentence)
>>> ;
>
> Appended below is a COMPLETE Parsing example using just this rule.
>
> And it WORKS just fine.
>
> Could you please modify this complete example so that it will
> demonstrate the error you are seeing. And then maybe someone will be
> better able to figure out what is the cause.
>
> Thank You
> -jbb
>
>>>
>>> in a tree grammar with rewrite = true. This is meant to tack a name
>>> onto the results of parsing a 'sentence'. Thing is when I parse a
>>> sample input I get an infinite tree that looks like this
>>>
>>> (ASSERTION foo
>>> (ASSERTION foo
>>> (ASSERTION foo
>>> (ASSERTION foo
>>> (ASSERTION foo
>>> ....
>>>
>>> Thing is that the sentence production does not call assertion,
>>> otherwise I could understand why my rewrite might get itself
>>> reparsed
>>> or something.
>>>
>>> Any idea what's happening here and how to stop it?
>
> //-----begin cut here ----- cut here ----- cut here -----
>
> grammar Test;
>
> options {
> output = AST;
> ASTLabelType = CommonTree;
> }
>
> tokens {
> ASSERTION;
> NAME;
> }
>
> @members {
> private static final String [] x = new String[]{
> "a sentence goes here"
> };
>
> public static void main(String [] args) {
> for( int i = 0; i < x.length; ++i ) {
> try {
> System.out.println("about to parse:`"+x[i]+"`");
> TestLexer lexer = new TestLexer(new
> ANTLRStringStream(x[i]));
> CommonTokenStream tokens = new CommonTokenStream
> (lexer);
>
> TestParser parser = new TestParser(tokens);
> TestParser.start_return p_result = parser.start();
>
> CommonTree ast = p_result.tree;
> if( ast == null ) {
> System.out.println("resultant tree: is NULL");
> } else {
> System.out.println("resultant tree: " +
> ast.toStringTree());
> }
> System.out.println();
> } catch(Exception e) {
> e.printStackTrace();
> }
> }
> }
> }
>
> start : assertion EOF!;
>
> assertion : sentence -> ^(ASSERTION NAME["foo"] sentence) ;
>
> sentence : 'a sentence goes here' ;
>
> WS : ( ' ' | '\t' | '\r' | '\n' )+ { $channel=HIDDEN; } ;
>
> // ----- end cut here ----- cut here ----- cut here -----
>
>
Bill Andersen
Ontology Works, Inc. (www.ontologyworks.com)
3600 O'Donnell Street, Suite 600
Baltimore, MD 21224
Office: +1.410.675.1201
Cell: +1.443.858.6444
Fax: +1.410.675.1204
More information about the antlr-interest
mailing list