fix long string test and escaped \0

This commit is contained in:
ridethepig 2023-03-23 04:54:42 +00:00
parent dcff1387d9
commit 402f26b01d
3 changed files with 11 additions and 6 deletions

View File

@ -69,7 +69,7 @@ clean-compile:
-include ${CFIL:.cc=.d}
comparetest:
comparetest: lexer
${CLASSDIR}/bin/lexer ${TESTCASE} > std.out
./lexer ${TESTCASE} > my.out
diff my.out std.out

View File

@ -216,7 +216,7 @@ FALSE f[Aa][Ll][Ss][Ee]
/* it is necessary to exclude \0 here */
*string_buf_ptr = yytext[0];
string_buf_ptr ++;
if (string_buf_ptr > string_buf + MAX_STR_CONST) {
if (string_buf_ptr >= string_buf + MAX_STR_CONST) {
BEGIN(STRINGREC);
cool_yylval.error_msg = "String constant too long";
return (ERROR);
@ -240,6 +240,11 @@ FALSE f[Aa][Ll][Ss][Ee]
case 't': *string_buf_ptr = '\t'; break;
case 'n': *string_buf_ptr = '\n'; break;
case 'f': *string_buf_ptr = '\f'; break;
/*
* This rule is not described in PA2's section4, though it could be implied by manual's
* `A string may not contain the null (character \0)`.
*/
case '\0': BEGIN(STRINGREC); cool_yylval.error_msg = "String contains escaped null character."; return (ERROR);
default: *string_buf_ptr = yytext[1]; break; /* \\n is included here*/
}
/*
@ -247,7 +252,7 @@ FALSE f[Aa][Ll][Ss][Ee]
* this is handled in the default branch
*/
string_buf_ptr ++;
if (string_buf_ptr > string_buf + MAX_STR_CONST) {
if (string_buf_ptr >= string_buf + MAX_STR_CONST) {
BEGIN(STRINGREC);
cool_yylval.error_msg = "String constant too long";
return (ERROR);

View File

@ -182,7 +182,7 @@ long string long string long string long string long string long string long str
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long strin ";
long string long string long string long string long string long strin ";
long_string_1025: String <- " long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
@ -192,7 +192,7 @@ long string long string long string long string long string long string long str
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long strin ";
long string long string long string long string long string long strin ";
long_string_1024: String <- " long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
@ -202,5 +202,5 @@ long string long string long string long string long string long string long str
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long string long string long string long string long string \
long string long string long string long string long string long strin ";
long string long string long string long string long string long strin ";