[antlr-interest] Creating tree items in an exception

Jan van der Ven jhvdven at xs4all.nl
Sun Mar 18 03:03:52 PDT 2007


Dear all,


I figured it out: you have to assign the resulting tree to the returnAST 
variable before returning from the exception.

Regards,
Jan


Jan van der Ven wrote:
> Dear all,
>
>
>
> I am trying to parse a SQL script and to continue to the next 
> statement in case of errors in the current statement. I handle 
> exceptions in the grammar like this (inspired by Preshant):
> sql_data_stmt : {nStatements++;}
>      select_stmt
>    | insert_stmt
>    | update_stmt
>    | delete_stmt
> ;
> exception
> catch [NoViableAltException nvae]
> {
>    System.out.println("sql_data_stmt nvae " + nvae.getMessage());
>    QError e = new QError("NoViableAltException");
>    [...] // fill this error instance with useful stuff
>
>    // here is the problematic statement
>    ##=#([ERROR_STATEMENT,"error nvae"]);
>    if(LA(1)==SEMICOLON)
>    {
>        consume();
>        sql_stmt();
>        return;
>    }
>    consume();
>    /*
>        A semicolon is a quite wonderful thing to have, but is not
>        required by all databases. So we might also try valid statement
>        starting keywords here.
>    */
>    while (LA(1) != Token.EOF_TYPE && (LA(1)!=SEMICOLON)) {
>        consume();
>    }
>    if(LA(1)==SEMICOLON){
>        consume();
>    }
>    if(LA(1) != Token.EOF_TYPE){
>        sql_stmt();
>    }
>    return;
> }
>
>
> The funny bit is that I do get the console output, but do not get the 
> addition to the final AST.
>
> Can anyone point me towards a solution?
>
> Thanks in advance.
>
>
> Jan
>
>
>
>



More information about the antlr-interest mailing list