diff --git a/src/parser/parser.l b/src/parser/parser.l index b046d60..723850b 100644 --- a/src/parser/parser.l +++ b/src/parser/parser.l @@ -137,7 +137,14 @@ L?'\\v' (void)'\v'; return TOK_CHAR_CONST; \\x[0-9A-Fa-f]{2} { /* hexadecimal escape code */ unsigned int val; - (void) sscanf(yytext + 2, "%x", &val); + (void)sscanf(yytext + 1, "%x", &val); + char v[2] = {(char)val, '\0'}; + String_concat(build_string, v); +} +\\[0-7][0-7]?[0-7]? { + /* octal escape code */ + unsigned int val; + (void)sscanf(yytext + 1, "%o", &val); char v[2] = {(char)val, '\0'}; String_concat(build_string, v); }