From 96cb2d7a0947a1075c65a786838cc80636d95972 Mon Sep 17 00:00:00 2001 From: Scarlett Date: Tue, 6 May 2025 17:34:10 -0400 Subject: [PATCH] we fixed this woooo --- genx.sh | 2 +- src/lexicalStructure.lex | 35 ++++++++++++++++++++++++++++++++++- tests/programs/io.alpha | 13 +++++++++++-- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/genx.sh b/genx.sh index 7025bd0..aa11527 100755 --- a/genx.sh +++ b/genx.sh @@ -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 diff --git a/src/lexicalStructure.lex b/src/lexicalStructure.lex index a8bd8af..8413ca3 100644 --- a/src/lexicalStructure.lex +++ b/src/lexicalStructure.lex @@ -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); + } +} \ No newline at end of file diff --git a/tests/programs/io.alpha b/tests/programs/io.alpha index eac7b03..ddfb00e 100644 --- a/tests/programs/io.alpha +++ b/tests/programs/io.alpha @@ -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; } \ No newline at end of file