make parser more robuust, add string literals and escapes
[ccc.git] / scan.l
diff --git a/scan.l b/scan.l
index 59dec5f..9337331 100644 (file)
--- a/scan.l
+++ b/scan.l
@@ -68,10 +68,10 @@ Void        return TVOID;
 \[\]        return NIL;
 \.          return DOT;
 ,           return COMMA;
-\"([^"]|\\\")*\" {
-       yylval.expr = expr_string(yytext); return STRING; }
+\"([^\\"]|\\[\"0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])*\" {
+       yylval.expr = expr_string(trimquotes(yytext)); return STRING; }
 '([^\\']|\\['0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])' {
-       yylval.expr = expr_char(yytext); return CHAR; }
+       yylval.expr = expr_char(trimquotes(yytext)); return CHAR; }
 [0-9]+ {
        yylval.expr = expr_int(atoi(yytext)); return INTEGER; }
 [_a-zA-Z][_a-zA-Z0-9]* {