FW: [antlr-interest] Serious Bug when using BitSet generation-Forgot: USING ANTLR 2.7.5 !!!!

Geir Ove Skjaervik geiroves at online.no
Mon Oct 10 13:33:37 PDT 2005


Hello Terrence,
 
When you have the time, can you please consider this problem ? It looks
like a bug to me as my code work when I do NOT use Bitsets.However, I
guess the if() code is more time consuming. I also think it is important
for everyone to know about this scenario, and how to avoid it if
possible.
 
 
Geir Ove
 
-----Original Message-----
From: antlr-interest-bounces at antlr.org
[mailto:antlr-interest-bounces at antlr.org] On Behalf Of Geir Ove
Skjaervik
Sent: 9. oktober 2005 23:37
To: antlr-interest at antlr.org
Subject: RE: [antlr-interest] Serious Bug when using BitSet
generation-Forgot: USING ANTLR 2.7.5 !!!!


Hello,
 
Really nobody have a comment on this? It looks like a bug to me, and a
serious one ! At least ANTLR behaves differently when using if() code
then Bitsets, and it is not supposed to do that, at least now without
issuing any warnings that the bitsets may behave wronly, or what?
 
Terrence ?
 
Geir Ove
-----Original Message-----
From: antlr-interest-bounces at antlr.org
[mailto:antlr-interest-bounces at antlr.org] On Behalf Of Geir Ove
Skjaervik
Sent: 7. oktober 2005 02:57
To: antlr-interest at antlr.org
Subject: RE: [antlr-interest] Serious Bug when using BitSet generation
-Forgot: USING ANTLR 2.7.5 !!!!


Forgot: USING ANTLR 2.7.5 !!!!
 
Geir Ove

-----Original Message-----
From: antlr-interest-bounces at antlr.org
[mailto:antlr-interest-bounces at antlr.org] On Behalf Of Geir Ove
Skjaervik
Sent: 7. oktober 2005 02:44
To: antlr-interest at antlr.org
Subject: [antlr-interest] Serious Bug when using BitSet generation


Hello,
 
I seem to have encountered a serious bug when using bitset generation
(the default). I have had to turn it of setting
codeGenBitsetTestThreshold=999;
 
The problem occurs in empty productions preceded by syntactic
predicates. I have this in several bocks as shown below. When using
bitset generation, I get NoViableAltException because of the wrong code
generation whenever a particular block should match an empty production.
Here is an excerpt of the code:
 
(Terrence, If you need samples of the generated code with / without
BitSet generation, I will provide it. Right now I am very tired, just
wanted to post this!)
 
------------------------------------ Start Parser Code Excerpt
-------------------------------------------
 
.....
 
parseProgram returns [String r=null]
 : c0:commonProgramHeader 
   c1:commonTitleDescriptionUsesStoresBlock1
   c2:commonConstantsBlock2
   c3:commonLibraryBlock3
   c4:commonFormulaBlock4
   c5:commonFunctionCallBlock5
   end:RCURLY (SEMI!)? EOF!
 ;
 


commonProgramHeader
 :  (autoGeneratedDateTag)?
  (p:PROGRAM^<AST=no.oss.gos.FunctionNode> pId:ID {isProgram = true;} |
CATEGORY^ cId:ID {isCategory = true;} | CONSTANTS^ gId:ID {isConstants =
true;}) LCURLY
 ; 
 
 
commonTitleDescriptionUsesStoresBlock1
 {
  String programTitle = null, programDescription = null;
  int pos = 0; // rewind position set below
 }
 // We need to terminate the (title)? (description)?
(storesDeclarations)? (usesDeclarations)? construction
 // or we get an ambiguity: Thus, we state that we expect (CONSTANTS! |
LIBRARY! | FORMULAS!) following this optional construct
 // But then we need to rewind before continuing: Thus we use a mark()
and rewind() to do this !
 : {isProgram | isCategory}? (programTitle=title)?
(programDescription=description)? (storesDeclarations)?
(usesDeclarations)? {pos=mark();} (CONSTANTS! | LIBRARY! | FORMULAS!)
   { 
    rewind(pos);
    options.setProgramDescription(programDescription); 
    options.setProgramTitle(programTitle);
   }
 | {isProgram}? ( )         ****************   NOTE : These kind of
empty productions FAIL to match an empty Production when using BITSET
generation !
 | {isCategory}? ( )
 | {isConstants}?   ( )
 ;
 
commonConstantsBlock2
 : {isCategory}? constantDeclarations
 | {isCategory}? ( )  
 | {isConstants}? constantDeclarationsList
 | {isProgram}? ( )
 ;
 
commonLibraryBlock3
 : {isCategory}? libraryDeclarations
 | {isCategory}? ( )  
 | {isProgram}?  ( ) 
 | {isConstants}? ( ) 
 ;
 
commonFormulaBlock4
 : {isProgram}? formulaDeclarations
 | {isCategory}? formulaDeclarations
 | {isConstants}? ( ) 
 ;
 
commonFunctionCallBlock5
 : {isProgram}? mainCall SEMI!   
 | {isCategory}? ( ) 
 | {isConstants}? ( )
 ; 
 
.........
 
 

------------------------------------ End Parser Code Excerpt
-------------------------------------------
 
 
regards

Geir Ove Skjaervik
Objective Software Solutions
Norway
Phone: Int+907-48-869
Fax: Int+47-6988-5947
E-mail: objective.software at online.no
WEB: http://objective.bitfikler.com/

 

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


More information about the antlr-interest mailing list