[ragel-users] Re: Possible bug in scanner

Adrian Thurston thurs... at cs.queensu.ca
Mon Apr 21 17:55:45 UTC 2008


Hi David, I just checked in a fix for this. Let me know if it doesn't
work for you.

Thanks,
 Adrian

David Balmain wrote:
> On Apr 21, 9:44 am, Adrian Thurston <thurs... at cs.queensu.ca> wrote:
>> I just checked in a fix for this.
>>
>> This bug affects -T0 and -T1 for all target languages. The problem
>> occurs when the last token of a scanner requires some backtracking to match.
> 
> Hi Adrian,
> 
> Thanks for getting on to this so quickly. Unfortunately it doesn't
> seem to have fixed a problem. I'm actually using -G2 as well as the
> default (-T0 I believe) and the error occurs in both cases. I've
> investigated this a little more and found a work around;
> 
> %%{
>     machine Word;
> 
>     main := |*
>         'a' {PUTS("a: ");};
>         [ab]+ . 'c' {PUTS("abc: ");};
> -        any;
> +        any {};
>     *|;
> 
> }%%
> 
> Note the empty braces after 'any'. With them I get this for my
> "longest match"?? switch;
> 
>             switch( act ) {//--
>                 case 1:
>                     {{p = ((te))-1;}PUTS("a: ");}
>                     break;
>                 case 3:
>                     {{p = ((te))-1;}}
>                     break;
>                 default: break;
>             }
> 
> Without the empty braces "case 3:" is missing;
> 
>             switch( act ) {//--
>                 case 1:
>                     {{p = ((te))-1;}PUTS("a: ");}
>                     break;
>                 default: break;
>             }
> 
> So p never gets reset if the ( [ab]+ . 'c' ) fails to match. This is
> particularly bad if we are at the end of a string as it will continue
> to scan after the null byte causing a segfault. I've tried to find
> were the problem is in the source so I could give you a patch but it
> is taking me a little while figure things out  and I thought you'd
> probably be able to fix this straight away. Let me know if there is
> anything else I can do to help.
> 
> Cheers,
> Dave
> > 
> 



More information about the ragel-users mailing list