[antlr-interest] Tree Rewrite doubt | errors on parser generation
Miguel Ping
mblp at mega.ist.utl.pt
Thu Feb 22 14:29:32 PST 2007
Hi all!
I am currently trying to port PL/SQL 7 antlr v2 grammar downloadable
from antlr site to antlr v3 b6. The grammar has some tree rewrite
rules that are useful to group statements under a tree like:
sql_statement: sql_command (SEMI)?
{ #sql_statement = #([SQL_STATEMENT, "sql_statement"],
#sql_statement); }
If I understant the tree rewrite rules correctly, this grammar rule
states that the (sub) tree that will be assigned to sql_statement is
to be assigned to a child under the SQL_STATEMENT imaginary token with
the name "sql_statement". For me to port those definitions to antlr
v3, should I do it this way:
sql_statement: sql_command (SEMI)? -> ^(SQL_STATEMENT sql_statement);
Because if I do it that way, antlr tool tells me that the
'sql_statement' does not exist on the left side of the '->' symbol:
error(136): reference to rewrite element sqlStatement without
reference on left of ->
How should I work this out?
There are 2 other errors happening in the generated parser code:
1. The symbol LA27_1 in the following method does not exist:
public int specialStateTransition(int s) throws NoViableAltException {
int _s = s;
switch ( s ) {
case 0 :
input.rewind();
s = -1;
if ( (LA27_1==OPEN_PAREN||LA27_1==DOT) ) {s =
14;} //error here
else if ( (synpred7()) ) {s = 9;}
(...)
Since this method overrides the one in the DFA, I guess that this must
be a problem with the generator, but I can be wrong...
2. In the rule
variable : ( ( columnSpec ( OPEN_PAREN PLUS CLOSE_PAREN ) )=>
columnSpec ( OPEN_PAREN PLUS CLOSE_PAREN ) | columnSpec );
The parser code for the return tree I guess is in this method, which
has alot of if's and cases:
public variable_return variable() throws RecognitionException {
(...)
int LA29_5 = input.LA(7);
(...)
The problem is that the variable 'int LA29_5' is being duplicated in
alot of places on this method. Is this because of my rule, or can it
be a antlr bug?
Thanks In advance!
More information about the antlr-interest
mailing list