[MLton] fix for bug in mlyacc

Matthew Fluet matthew.fluet at gmail.com
Mon Jan 17 13:01:56 PST 2011


Thanks Michael.  I committed your patch.

I guess it says something that no one before ever felt compelled to
comment their semantic actions.  I'm just not sure what the something
is...

The SML/NJ version of the tool will still have this bug; you might
push the patch to them as well.

On Wed, Jan 12, 2011 at 12:26 AM, Michael Norrish
<Michael.Norrish at nicta.com.au> wrote:
> Fix bug in comment-handling in lexer for mlyacc's input language.
>
> In particular, if a comment was successfully lexed, it returned a
> BOGUS_VALUE
> token, which then messed up the higher-level parsing.  This was due to
> the use of the idiom
>
>  continue() before YYBEGIN SOMESTATE
>
> making the return value of the continue the return value for the lexer at
> that point.
>
> This bug prevented the use of comments in code sections entirely.
>
> It was somewhat masked in the prefix section by the fact that most
> supposed comments there were never lexed as such anyway.  This could
> be observed by a file that included %% in a comment in the prefix
> section.
>
>
> diff --git a/mlyacc/src/yacc.lex b/mlyacc/src/yacc.lex
> --- a/mlyacc/src/yacc.lex
> +++ b/mlyacc/src/yacc.lex
> @@ -71,11 +71,11 @@
>  qualid ={id}".";
>  %%
>  <INITIAL>"(*"  => (Add yytext; YYBEGIN COMMENT; commentLevel := 1;
> -                   continue() before YYBEGIN INITIAL);
> +                   continue(); YYBEGIN INITIAL; continue());
>  <A>"(*"                => (YYBEGIN EMPTYCOMMENT; commentLevel := 1;
> continue());
>  <CODE>"(*"     => (Add yytext; YYBEGIN COMMENT; commentLevel := 1;
> -                   continue() before YYBEGIN CODE);
> -<INITIAL>[^%\n]+ => (Add yytext; continue());
> +                   continue(); YYBEGIN CODE; continue());
> +<INITIAL>[^(%\n]+ => (Add yytext; continue());
>  <INITIAL>"%%"   => (YYBEGIN A; HEADER (concat (rev
> (!text)),!lineno,!lineno));
>  <INITIAL,CODE,COMMENT,F,EMPTYCOMMENT>\n  => (Add yytext; inc lineno;
> continue());
>  <INITIAL>.      => (Add yytext; continue());
>
> _______________________________________________
> MLton mailing list
> MLton at mlton.org
> http://mlton.org/mailman/listinfo/mlton
>



More information about the MLton mailing list