[antlr-interest] Possible bug in generated code

Anakreon Mejdi amejdi at ertonline.gr
Mon Nov 4 08:40:42 PST 2002


Sure.
The attachment is bz2 compressed.
If no bzip2 available I will send it in gzip or plain tar, whatever you 
prefer.

Build the project with: ant compile
run:
java -cp build Main3 <tests/logginCheck.inc



mzukowski at yci.com wrote:

> Could you post the smallest java file that triggers the bug?  This will help
> me diagnose it without wild speculation.
> 
> Monty
> 
> -----Original Message-----
> From: Anakreon Mejdi [mailto:amejdi at ertonline.gr]
> Sent: Monday, November 04, 2002 7:32 AM
> To: antlr-interest at yahoogroups.com
> Subject: [antlr-interest] Possible bug in generated code
> 
> 
> Hello antlr users.
> 
> I faced a problem with the Parser generated by antlr, and have possibly 
> dicovered a bug in the code generated.
> 
>  From a rule declared as:
> if_rule
>    :
>    IF^ LPAREN! expression RPAREN! statement
>    (
>        options {
>          warnWhenFollowAmbig = false;
>        }
>        :
>        ELSE! statement
>    )?
>    ;
> wich is copied from java.g the code generated is:
> 
> 	public final void if_rule() throws RecognitionException, 
> TokenStreamException {
> 		
> 		returnAST = null;
> 		ASTPair currentAST = new ASTPair();
> 		AST if_rule_AST = null;
> 		
> 		AST tmp52_AST = null;
> 		if (inputState.guessing==0) {
> 			tmp52_AST = (AST)astFactory.create(LT(1));
> 			astFactory.makeASTRoot(currentAST, tmp52_AST);
> 		}
> 		match(IF);
> 		AST tmp53_AST = null;
> 		tmp53_AST = (AST)astFactory.create(LT(1));
> 		match(LPAREN);
> 		expression();
> 		if (inputState.guessing==0) {
> 			astFactory.addASTChild(currentAST, returnAST);
> 		}
> 		AST tmp54_AST = null;
> 		tmp54_AST = (AST)astFactory.create(LT(1));
> 		match(RPAREN);
> 		statement();
> 		if (inputState.guessing==0) {
> 			astFactory.addASTChild(currentAST, returnAST);
> 		}
> 		{
> 		if ((LA(1)==ELSE) && (_tokenSet_0.member(LA(2)))) {
> 			AST tmp55_AST = null;
> 			tmp55_AST = (AST)astFactory.create(LT(1));
> 			match(ELSE);
> 			statement();
> 			if (inputState.guessing==0) {
> 				astFactory.addASTChild(currentAST,
> returnAST);
> 			}
> 		}
> 		else if ((_tokenSet_6.member(LA(1))) &&
> (_tokenSet_7.member(LA(2)))) {
> 		}
> 		else {
> 			throw new NoViableAltException(LT(1),
> getFilename());
> 		}
> 		
> 		}
> 		if_rule_AST = (AST)currentAST.root;
> 		returnAST = if_rule_AST;
> 	}
> 
> My objection to this code is that the ELSE part is optional,
> so why  does this code:
> 		else if ((_tokenSet_6.member(LA(1))) &&
> (_tokenSet_7.member(LA(2)))) {
> 		}
> 		else {
> 			throw new NoViableAltException(LT(1),
> getFilename());
> 		}
> exists?
> The parser fails to parse a file when after the "if" part is matched an 
> EOF Token follows.
> 
> To prove my theory I removed the
> else if ((_tokenSet_6.member(LA(1))) && ....
> line and indead the parser worked just fine.
> 
> My version of antlr is antlr-2.7.1 and jdk1.4.
> 
> 
> If this is after all a bug and is fixed in antlr-2.7.2
> I apologize for mentioning again.
> 
> Thanks in advance.
> Anakreon
> 
> 
> 
>  
> 
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 
> 
> 
>  
> 
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 
> 
> 
> 


 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: asp.tar.bz2
Type: application/octet-stream
Size: 20214 bytes
Desc: not available
Url : http://www.antlr.org/pipermail/antlr-interest/attachments/20021104/e19ae3d1/asp.tar.obj


More information about the antlr-interest mailing list