work on type inference some more
[ccc.git] / scan.l
diff --git a/scan.l b/scan.l
index 9337331..664868c 100644 (file)
--- a/scan.l
+++ b/scan.l
@@ -1,3 +1,9 @@
+D [0-9]
+H [0-9a-fA-F]
+E ([0\\abtnvfr]|x{H}?{H}|0[0-3]?{O}?{O})
+I [a-zA-Z_]
+O [0-7]
+
 %option noinput
 %option nounput
 %{
@@ -17,7 +23,7 @@
     }
 
 #include "ast.h"
-#include "y.tab.h"
+#include "parse.h"
 
 %}
 
@@ -68,13 +74,13 @@ Void        return TVOID;
 \[\]        return NIL;
 \.          return DOT;
 ,           return COMMA;
-\"([^\\"]|\\[\"0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])*\" {
+\"([^\\"]|\\(\"|{E}))*\" {
        yylval.expr = expr_string(trimquotes(yytext)); return STRING; }
-'([^\\']|\\['0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])' {
+'([^\\']|\\('|{E}))' {
        yylval.expr = expr_char(trimquotes(yytext)); return CHAR; }
-[0-9]+ {
+{D}+ {
        yylval.expr = expr_int(atoi(yytext)); return INTEGER; }
-[_a-zA-Z][_a-zA-Z0-9]* {
+{I}({I}|{D})* {
        yylval.ident = safe_strdup(yytext); return IDENT; }
 }
 <IN_COMMENT>{