we fixed this woooo
This commit is contained in:
2
genx.sh
2
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
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
Reference in New Issue
Block a user