[antlr-interest] best way to deal with nested statements

michael micha-1 at fantasymail.de
Mon Jun 28 00:47:55 PDT 2010


On Friday 25 June 2010 16:36:43 Scherer Markus wrote:
> Thanks for your quick response Gordon.
> 
> Unfortunately, this solution does not seem to work. If I define "stuff" as
>  generic as I want it to be (like (options {greedy=false;} : .)*)) it isn't
>  able to compile either (The following alternatives can never be matched:
>  2). I guess because the END of a codeBlock would get matched by "stuff" in
>  statement. If define stuff as
> 
> stuff	:	(options {greedy=false;} : ~(END))* ;
> 
> it does not match all tokens I am interested in :-/.

this is like switching the lexer language during lexing. There are discussions 
here that antlr is able so simulate packrat parsing (like rats!), which can 
handle that (you need to enable backtracking for unlimited lookahead and 
memoizing), but I'm not sure about it.
You could also use another lexer like jflex with antlr which has lexer states 
to handle that.

But if your pl_sql_block_content (or stuff) includes a statement with a string 
which includes your 'END' keyword, your splitter doesn't work anymore. So you 
may need to lex strings in pl_sql_block_content (or stuff).

cheers,
 Michael


More information about the antlr-interest mailing list