[antlr-interest] Have I found an Antlr CSharp3 lexer bug if...

Chris King kingces95 at gmail.com
Thu Aug 4 11:04:28 PDT 2011


I should have called out the space after the comment. That's what caused the problem. "/**/ ". So the input string has 5 characters. 

Thanks,
Chris

On Aug 4, 2011, at 7:04 AM, "Sam Harwell" <sharwell at pixelminegames.com> wrote:

> Hi Chris,
> 
>  
> 
> I’m using the released version 3.4.0 of the ANTLR CSharp3 target. I copy/pasted the grammar below (aside from renaming it to Preprocessor) and it passed the following unit test.
> 
>  
> 
> [TestMethod]
> 
> public void TestEmptyComment()
> 
> {
> 
>     string inputText = "/**/";
> 
>     var input = new ANTLRStringStream(inputText);
> 
>     var lexer = new PreprocessorLexer(input);
> 
>     var tokenStream = new CommonTokenStream(lexer);
> 
>     tokenStream.Fill();
> 
>  
> 
>     List<IToken> tokens = tokenStream.GetTokens();
> 
>     Assert.AreEqual(2, tokens.Count);
> 
>     Assert.AreEqual(PreprocessorLexer.DELIMITED_COMMENT, tokens[0].Type);
> 
>     Assert.AreEqual(inputText, tokens[0].Text);
> 
>     Assert.AreEqual(PreprocessorLexer.EOF, tokens[1].Type);
> 
> }
> 
>  
> 
> Sam
> 
>  
> 
> From: chris king [mailto:kingces95 at gmail.com] 
> Sent: Thursday, August 04, 2011 3:48 AM
> To: Sam Harwell; antlr-interest at antlr.org
> Subject: Re: Have I found an Antlr CSharp3 lexer bug if...
> 
>  
> 
> Sam, while trying build my pre-processor with a mixed parser/lexer I ran across what I think might be a bug. I reduced the repro below. I expected the program below to accept "/**/ " but instead fails because the lexer prediction enters PP_SKIPPED_CHARACTERS. That rule has a gated semantic predicate which is always false. I expected a lexer rule with a gated semantic predicate which is always false to never be matched. If I comment out the PP_SKIPPED_CHARACTERS rule then it does match "/**/ ". So the inclusion of that rule is cause the problem. Let me know if you think this is a bug and if you can repro.
> 
>  
> 
> Thanks,
> Chris
> 
>  
> 
> grammar Bug; 
> 
>  
> 
> options {
> 
>    language=CSharp3;
> 
>    output=AST;
> 
> }
> 
>  
> 
> public start
> 
>   : DELIMITED_COMMENT !EOF
> 
>   ;
> 
>   
> 
> PP_SKIPPED_CHARACTERS
> 
>   : { false }? => ~(F_NEW_LINE_CHARACTER | F_PP_POUND_SIGN) F_INPUT_CHARACTER*
> 
>   ;
> 
>   
> 
> DELIMITED_COMMENT
> 
>   : { true }? => '/*' .* '*/'
> 
>   ;
> 
>   
> 
> WHITESPACE
> 
>   : F_WHITESPACE {skip();}
> 
>   ;
> 
>   
> 
> fragment F_WHITESPACE
> 
>   : (' ' | '\t' | '\v' | '\f')+ 
> 
>   ;
> 
>  
> 
> fragment F_NEW_LINE_CHARACTER
> 
>   : '\r'
> 
>   | '\n'
> 
>   ;
> 
>   
> 
> fragment F_PP_POUND_SIGN
> 
>   : '#'
> 
>   ;
> 
>   
> 
> fragment F_INPUT_CHARACTER
> 
>   : ~F_NEW_LINE_CHARACTER
> 
>   ;


More information about the antlr-interest mailing list