[antlr-interest] Tree Rewriting problem - RewriteEmptyStreamException at runtime
Grzegorz Cieslewski
cieslewski at hcs.ufl.edu
Thu Feb 7 07:28:06 PST 2008
My mistake, I have been experimenting with more complex grammar and
accidentally pasted that error.
The error I am getting in the grammar attached it
Exception in thread "main"
org.antlr.runtime.tree.RewriteEmptyStreamException: rule type
at org.antlr.runtime.tree.RewriteRuleElementStream._next(RewriteRuleElementStream.java:158)
at org.antlr.runtime.tree.RewriteRuleElementStream.nextTree(RewriteRuleElementStream.java:145)
at TP.a(TP.java:125)
at Main.main(Main.java:37)
I am working on a c parser (and more), I used the ANSI C grammar by
Terence that is on the website as a start point.
In that grammar he has a rule called type specifiers which looks like:
type_specifier
: 'void'
| 'char'
| 'short'
| 'int'
| 'long'
| 'float'
| 'double'
| 'signed'
| 'unsigned'
| struct_or_union_specifier
| enum_specifier
| type_id
;
He does not defines them as tokens either. I guess I am just little
confused about which way is the correct way?
On Feb 7, 2008 7:10 AM, Jon Schewe <jpschewe at mtu.net> wrote:
> I typically don't do rewrites in my tree grammar, but in my parser. So
> that might be a problem. The other thing that I've noticed helps with
> these errors is to make sure to define tokens for all elements. So
> 'int' and 'char' should be defined in your lexer as tokens and then
> reference the tokens in your parser and tree grammar.
>
> It also seems that the exception doesn't match your grammar. The errors
> simpleCrw.declaration and simpleCrw.file suggest to me that you have a
> grammar named simpleCrw with rules declaration and file and that's where
> the error is. However those rules don't exist in the file you sent.
>
>
> Grzegorz Cieslewski wrote:
> > I am using the 3.1b1 version of antlr so I could do some tree
> > rewriting. I found a good set of examples in the
> > TestTreeGrammarRewriteAST.java file and decided to start
> > experimenting. Unfortunately I have run in to a problem with my
> > program throwing an exception.
> > My Grammar is:
> > grammar T;
> > options {output=AST;}
> > tokens
> > {
> > EXPR;
> > }
> > a : type ID INT -> ^(EXPR type ID INT);
> > type : 'int'
> > | 'char';
> > ID : 'a'..'z'+ ;
> > INT : '0'..'9'+;
> > WS : (' '|'\n') {$channel=HIDDEN;} ;
> >
> > and the tree grammar:
> >
> > tree grammar TP;
> > options {
> > output=AST;
> > ASTLabelType=CommonTree;
> > tokenVocab=T;}
> >
> > a : ^(EXPR type ID INT) -> ^(EXPR type INT ID)
> > ;
> >
> > type : 'int'
> > | 'char';
> >
> > f
> > Everything compiles but I get following error during runtime (with
> > input "int abc 123"):
> >
> > Exception in thread "main"
> > org.antlr.runtime.tree.RewriteEmptyStreamException: rule type
> > at org.antlr.runtime.tree.RewriteRuleElementStream._next(RewriteRuleElementStream.java:158)
> > at org.antlr.runtime.tree.RewriteRuleElementStream.nextTree(RewriteRuleElementStream.java:145)
> > at simpleCrw.declaration(simpleCrw.java:182)
> > at simpleCrw.file(simpleCrw.java:92)
> > at Main2.main(Main2.java:41)
> >
> > I have noticed that if I change the rule type in the tree grammar as
> > follows the problem does not occur:
> >
> > tree grammar TP;
> > options {
> > output=AST;
> > ASTLabelType=CommonTree;
> > tokenVocab=T;}
> >
> > a : ^(EXPR type ID INT) -> ^(EXPR type INT ID)
> > ;
> >
> > type : 'int';
> >
> > I have tracked this a little further. When I remove the rewrite rule
> > from the tree grammar :
> >
> > tree grammar TP;
> > options {
> > output=AST;
> > ASTLabelType=CommonTree;
> > tokenVocab=T;}
> >
> > a : ^(EXPR type ID INT)
> > ;
> >
> > type : 'int'
> > | 'char';
> >
> > The output tree I get after the LexerParser is
> > EXPR
> > |-int
> > |-abc
> > |-123
> >
> > but after the tree grammar I get the tree missing the int node
> > EXPR
> > |-abc
> > |-123
> >
> > Does any one have any idea as to what is going on?
> >
> > P.S. I attached my whole setup
> >
> >
> >
>
> --
> Jon Schewe | http://mtu.net/~jpschewe
> If you see an attachment named signature.asc, this is my digital
> signature.
> See http://www.gnupg.org for more information.
>
> For I am convinced that neither death nor life, neither angels
> nor demons, neither the present nor the future, nor any
> powers, neither height nor depth, nor anything else in all
> creation, will be able to separate us from the love of God that
> is in Christ Jesus our Lord. - Romans 8:38-39
>
>
--
=====================================================
Grzegorz Cieslewski
Research Assistant
High-performance Computing & Simulation (HCS) Research Laboratory
University of Florida, Dept. of Electrical and Computer Engineering
330 Benton Hall, Gainesville, FL, 32611-6200
Phone: (352) 392-9041
Email: cieslewski at hcs.ufl.edu
Web: www.hcs.ufl.edu
=====================================================
More information about the antlr-interest
mailing list