2024-12-11 15:28:32 -05:00

56 lines
1.3 KiB
C

#include "errormsg.h"
#include "tokens.h"
#include "util.h"
#include <stdio.h>
#include <stdlib.h>
YYSTYPE yylval;
int yylex(void); /* prototype for the lexing function */
string toknames[] = { "ID", "STRING", "INT", "COMMA", "COLON",
"SEMICOLON", "LPAREN", "RPAREN", "LBRACK", "RBRACK",
"LBRACE", "RBRACE", "DOT", "PLUS", "MINUS",
"TIMES", "DIVIDE", "EQ", "NEQ", "LT",
"LE", "GT", "GE", "AND", "OR",
"ASSIGN", "ARRAY", "IF", "THEN", "ELSE",
"WHILE", "FOR", "TO", "DO", "LET",
"IN", "END", "OF", "BREAK", "NIL",
"FUNCTION", "VAR", "TYPE" };
string tokname(int tok)
{
return tok < 257 || tok > 299 ? "BAD_TOKEN" : toknames[tok - 257];
}
int main(int argc, char **argv)
{
string fname;
int tok;
if (argc != 2) {
fprintf(stderr, "usage: a.out filename\n");
exit(1);
}
fname = argv[1];
EM_reset(fname);
for (;;) {
tok = yylex();
if (tok == 0)
break;
switch (tok) {
case ID:
case STRING:
printf("%10s %4d %s\n", tokname(tok), EM_tokPos,
yylval.sval);
break;
case INT:
printf("%10s %4d %d\n", tokname(tok), EM_tokPos,
yylval.ival);
break;
default:
printf("%10s %4d\n", tokname(tok), EM_tokPos);
}
}
return 0;
}