[antlr-interest] Interactive interpreter and line continuationcharacters

Sam Harwell sharwell at pixelminegames.com
Thu Oct 23 09:26:03 PDT 2008


Keep a flag (bool) in the lexer that sets whether or not the input it was fed (could be multiple lines) represents a complete statement. Make sure that the lexer can lex a single line without bombing - you should have a rule similar to the one below. After enter is pressed, lex the input from the start of the current statement (not line) through the end of the last line of the statement entered. Then check the lexer's statement completed flag; if true send the input to the parser, otherwise discard those results and wait for another line of text to be entered. Since an interactive shell's individual lexer inputs are short, there will be little overhead for repeatedly lexing the lines of a multi-line input.

 

// Very last rule of the lexer to stop troublesome NoViableAltException

ANYCHAR

        :       .

        ;

 

Sam

 

From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-bounces at antlr.org] On Behalf Of lars.vonwedel at bayertechnology.com
Sent: Thursday, October 23, 2008 5:18 AM
To: antlr-interest at antlr.org
Subject: [antlr-interest] Interactive interpreter and line continuationcharacters

 


Hello, 

I am trying to build an interactive interpreter shell for an application. A simple approach is obviously to read a line from the command line and send it to the lexer/parser.  However, the input language permits line continuation by special characters. If a line ends with a ';' or ',' it is supposed to be continued on the next line. 

To make things worse, some valid statements can end with multiple ',' characters. In this case, a special statement termination character '!' is used(and can be followed by arbitrary input to be disregarded). 

My current line of thinking is to send a line entered by the user to the lexer, let it skip anything beyond '!' and then look at the last token. If that is a ';' or ',' then obtain another line and concatenate the token streams before actually running the parser. 

Are there any better ideas how to deal with this ? 

Freundliche Grüße / Best Regards
Lars von Wedel
_________________________________________

Bayer Technology Services GmbH
E-mail: lars.vonwedel at bayertechnology.com
Web: www.bayertechnology.com

Geschäftsführer: Achim Noack
Aufsichtsratsvorsitzender: Dr. Wolfgang Plischke
Sitz der Gesellschaft: Leverkusen   |   Eintragung: Amtsgericht Köln, HRB 49896

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20081023/6ac89b73/attachment.html 


More information about the antlr-interest mailing list