we fixed this woooo

This commit is contained in:
Scarlett
2025-05-06 17:34:10 -04:00
parent 0a5b6ee7fb
commit 96cb2d7a09
3 changed files with 46 additions and 4 deletions

View File

@ -193,7 +193,7 @@ if [ $# -eq 1 ]; then
getIncludes "$1"
appendStr "$1"
./alpha -ir -tc -asc -cg -st "$1"
./alpha -ir -tc -asc -cg -st -tok "$1"
# include a grep here of asc to see if there are any errors

View File

@ -58,7 +58,24 @@ SCHAR \\n|\\t|\\\"|[^\"\n\\]
"->" { if(tok_flag != NULL) {print_tok(ARROW);} incr(line_number,column_number,ARROW); return ARROW; }
{DIGIT}+ {if(tok_flag != NULL){print_tok(C_INTEGER);}incr(line_number,column_number,C_INTEGER);yylval.integ = atoi(yytext)/*words = strdup("integer")*/;return C_INTEGER;}
'{CHAR}' {if(tok_flag != NULL){print_tok(C_CHARACTER);}incr(line_number,column_number,C_CHARACTER);char* token = strdup(yytext)/*yylval.tn = chara*/;yylval.letter = token[1];return C_CHARACTER;}
'{CHAR}' {
if (tok_flag) print_tok(C_CHARACTER);
incr(line_number, column_number, C_CHARACTER);
int value;
if (strcmp(yytext, "'\\n'") == 0) value = 0x0A;
else if (strcmp(yytext, "'\\t'") == 0) value = 0x09;
else if (strcmp(yytext, "'\\''") == 0) value = 0x27;
else if (strcmp(yytext, "'\\\\'") == 0) value = 0x5C;
else value = yytext[1];
yylval.letter = value;
return C_CHARACTER;
}
\"{SCHAR}*\" {if(tok_flag != NULL){print_tok(C_STRING);}incr(line_number,column_number,C_STRING);int k = strlen(yytext);yytext[k-1] = '\0';yylval.words = strdup(&yytext[1]);return C_STRING;}
{COMMENT} {if(tok_flag != NULL){print_tok(COMMENT);}incr(line_number,column_number,COMMENT);/*return COMMENT;*/}
_{DIGIT}+ {if(tok_flag != NULL){print_tok(ACCESS);}incr(line_number,column_number,ACCESS);yylval.integ = atoi(&yytext[1])/*words = strdup("integer")*/;return ACCESS;}
@ -81,3 +98,19 @@ _{DIGIT}+ {if(tok_flag != NULL){print_tok(ACCESS);}incr(line_number,colum
. { incr(line_number,column_number,0); }
%%
int decode_escape_char(const char *t) {
switch (*t) {
case 'n':
return 0x0A; // \n
case 't':
return 0x09; // \t
case '\\':
return 0x5C; // \\\
case '\'':
return 0x27; // \'
default:
fprintf(stderr, "(%d:%d) ** LEX ERROR: unknown escape \\%c\n", yylineno, yycolumn, *t);
exit(EXIT_FAILURE);
}
}

View File

@ -5,14 +5,23 @@ function entry: string2integer
entry (arg) := {
[integer: x; string: s; character: c; integer: result]
s := inS(1);
result := printCharacter('\t');
result := printCharacter('t');
result := printCharacter('a');
result := printCharacter('b');
result := printCharacter('\n');
result := printCharacter('\\');
result := printCharacter('"');
result := printCharacter('\'');
(*s := inS(1);
result := printS(s);
x := inI(1);
result := printI(x);
c := inC(1);
result := printC(c);
result := printC(c);*)
return 0;
}