+escape sequences

This commit is contained in:
anon 2024-07-16 04:46:36 +02:00
parent 3bdc2b7ba5
commit 7e356290a3
2 changed files with 25 additions and 5 deletions

View File

@ -12,6 +12,11 @@
(void)ignore;
}
}
void string_literal_buffer_append_char(char c) {
string_literal_ensure_surplus(1);
string_literal_buffer[string_litral_buffer_size] = c;
string_litral_buffer_size += 1;
}
#define YY_USER_INIT \
string_literal_buffer = malloc(128);
@ -224,11 +229,22 @@ library { BEGIN INITIAL; return END_LIBRARY; }
string_litral_buffer_size = 0;
return ARRAY_LITERAL;
}
. {
string_literal_ensure_surplus(yyleng);
memcpy(string_literal_buffer + string_litral_buffer_size, yytext, yyleng);
string_litral_buffer_size += yyleng;
}
\\n { string_literal_buffer_append_char('\n'); }
\\a { string_literal_buffer_append_char('\a'); }
\\b { string_literal_buffer_append_char('\b'); }
\\f { string_literal_buffer_append_char('\f'); }
\\r { string_literal_buffer_append_char('\r'); }
\\t { string_literal_buffer_append_char('\t'); }
\\v { string_literal_buffer_append_char('\v'); }
\\\" { string_literal_buffer_append_char('\"'); }
\\\\ { string_literal_buffer_append_char('\\'); }
\\x({hex}|{uhex})+ {
long v = strtol(yytext + 2, NULL, 16);
string_literal_ensure_surplus(sizeof(long));
memcpy(string_literal_buffer + string_litral_buffer_size, &v, sizeof(long));
string_litral_buffer_size += sizeof(long);
}
. { string_literal_buffer_append_char(yytext[0]); }
}
<IN_COMMENT>{

4
test/literal_escapes.eax Normal file
View File

@ -0,0 +1,4 @@
program example
u8 <> var = "hello\"world\n!\vpadding\x90"
begin
end program