edgecases
[ccc.git] / scan.l
diff --git a/scan.l b/scan.l
index 23545c0..59dec5f 100644 (file)
--- a/scan.l
+++ b/scan.l
 
 %}
 
+%start IN_COMMENT
+
 %%
 
+<INITIAL>{
+\/\*        BEGIN(IN_COMMENT);
+[ \n\t]     ;
+\/\/.*\n?   ;
 if          return IF;
 else        return ELSE;
 while       return WHILE;
@@ -62,12 +68,18 @@ Void        return TVOID;
 \[\]        return NIL;
 \.          return DOT;
 ,           return COMMA;
-'([^']|\\[abtnvfr]|\\x[0-9a-fA-F]{2})' {
+\"([^"]|\\\")*\" {
+       yylval.expr = expr_string(yytext); return STRING; }
+'([^\\']|\\['0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])' {
        yylval.expr = expr_char(yytext); return CHAR; }
 [0-9]+ {
        yylval.expr = expr_int(atoi(yytext)); return INTEGER; }
 [_a-zA-Z][_a-zA-Z0-9]* {
        yylval.ident = safe_strdup(yytext); return IDENT; }
-[ \n\t]  ;
+}
+<IN_COMMENT>{
+\*\/       BEGIN(INITIAL);
+.          ;
+}
 
 %%