#include "m2.tab.h" YYSTYPE yylval; char syname [][15] = { "ADD", "AND", "ARRAY", "ASSIGN", "BAR", "BEGIN", "BY", "CARET", "CASE", "CHARCONST", "COLON", "COMMA", "CONST", "DEFINITION", "DIVIDE", "DIV", "DO", "DOTDOT", "DOT", "ELSEIF", "ELSE", "END", "EQUAL", "EXIT", "EXPORT", "FOR", "FROM", "GE", "GT", "IDENT", "IF", "INTCONST", "IMPLEMENTATION", "IMPORT", "IN", "LEFTBRACE", "LEFTBRACKET", "LEFTPAREN", "LE", "LOOP", "LT", "MINUS", "MOD", "MODULE", "NE", "NOT", "OF", "OR", "POINTER", "PROCEDURE", "QUALIFIED", "READ", "RECORD", "REPEAT", "RETURN", "RIGHTBRACKET", "RIGHTBRACE", "RIGHTPAREN", "SEMICOLON", "SET", "STRCONST", "THENSY", "TIMES", "TO", "TYPE", "UNTIL", "VAR", "WHILE", "WITH", "WRITE", "WRIETLN", "UNMINUS" }; char *tokname(tok) { return tok<258 || tok>329 ? "BAD_TOKEN" : syname[tok-258]; } /* tokname */ int main(int argc, char **argv) { int yylex(void); /* prototype for the lexing function */ int tok; /* take care of options */ for(;;) { tok=yylex(); if ( tok==0 ) break; switch(tok) { case IDENTSY: case STRCONSTSY: printf("%10s %s\n",tokname(tok), yylval.name_ptr); break; case INTCONSTSY: case CHARCONSTSY: printf("%10s %d\n",tokname(tok), yylval.int_val); break; default: printf("%10s",tokname(tok)); } /* switch */ } /* for */ return 0; } /* main */