#include "token.h" /* token names for printout */ char tokenNames[100][16] = { "EOFnumber ", "SEMInumber ", "COLONnumber ", "COMMAnumber ", "DOTnumber ", "LPARENnumber ", "RPARENnumber ", "LTnumber ", "GTnumber ", "EQnumber ", "MINUSnumber ", "PLUSnumber ", "TIMESnumber ", "DOTDOTnumber ", "COLEQnumber ", "LEnumber ", "GEnumber ", "NEnumber ", "IDnumber ", "ICONSTnumber ", "CCONSTnumber ", "SCONSTnumber ", "ANDnumber ", "ARRAYnumber ", "BEGINnumber ", "CONSTnumber ", "DIVIDEnumber ", "DOWNTOnumber ", "ELSEnumber ", "ELSIFnumber ", "ENDnumber ", "ENDIFnumber ", "ENDLOOPnumber ", "ENDRECnumber ", "EXITnumber ", "FORnumber ", "FORWARDnumber ", "FUNCTIONnumber ", "IFnumber ", "ISnumber ", "LOOPnumber ", "NOTnumber ", "OFnumber ", "ORnumber ", "PROCEDUREnumber", "PROGRAMnumber ", "RECORDnumber ", "REPEATnumber ", "RETURNnumber ", "THENnumber ", "TOnumber ", "TYPEnumber ", "UNTILnumber ", "VARnumber ", "WHILEnumber " }; extern int yylex( ); /* lex function, from lex.yy.c */ extern int yyval; /* lex value, defined in lex.l */ extern char string_buff[]; /* string buffer, defined in table.c extern init_table(); /* init hash table, imported from table.c */ main( ) { int token; printf("\n TOKEN yyval ID/CONST\n\n"); init_table(); while ((token = yylex( )) != EOFnumber) { switch(token) { case IDnumber : printf("%s %5d %s\n", tokenNames[token-SEMInumber+1],yyval,string_buff+yyval); break; case ICONSTnumber : printf("%s %5d\n", tokenNames[token-SEMInumber+1],yyval); break; case SCONSTnumber: printf("%s %5d %s\n", tokenNames[token-SEMInumber+1],yyval,string_buff+yyval); break; case CCONSTnumber : printf("%s", tokenNames[token-SEMInumber+1]); switch(yyval) { case '\n' : printf(" '\\n'\n"); break; case '\t' : printf(" '\\t'\n"); break; case '\'' : printf(" '\\''\n"); break; case '\\' : printf(" '\\\\'\n"); break; default : printf(" '%c'\n", yyval); } break; default : printf("%s\n",tokenNames[token-SEMInumber+1]); } } printf("%s\n","EOFnumber"); }