To top this thread off, I went with this:

 /* DATA statements convert everything to a string */
<DATA_STATEMENT>{
[^,:\n]* {
            // eat any leading and trailing whitespace
            yytext = str_trim(yytext);
            
            // and quotes
            yytext = str_unquote(yytext);

            yylval.s = str_new(yytext);
            return STRING;
          }

[,] { return ','; } // triggers the exprlist syntax
 
 /* colons or line-ends end the data statement and reset the state */
[:] { BEGIN(INITIAL); return ':'; }
[\n] { BEGIN(INITIAL); return '\n'; }
}

It's worked with everything I've thrown at it from every book I could find. 
Hans noted that it would be best to do this in the patterns, and I agree, but 
working is a feature!

Now I just have to get my matrix inversion working and we're good to release.

Reply via email to