diff options
| author | Sarah Elizabeth Higbee <Madchen@fq-130-49-43-231.wireless.pitt.edu> | 2017-03-14 12:28:34 -0400 |
|---|---|---|
| committer | Sarah Elizabeth Higbee <Madchen@fq-130-49-43-231.wireless.pitt.edu> | 2017-03-14 12:28:34 -0400 |
| commit | 1bb37b1f9f351100ff628cbfb56f6cf52925a2b3 (patch) | |
| tree | 457884bdd2814304f1295cd23df7b912c790b495 /driver.c | |
| parent | 605fb8c0af874cb00b8b3060063ab297ce4410fb (diff) | |
| download | coe1622-1bb37b1f9f351100ff628cbfb56f6cf52925a2b3.tar.gz coe1622-1bb37b1f9f351100ff628cbfb56f6cf52925a2b3.tar.bz2 coe1622-1bb37b1f9f351100ff628cbfb56f6cf52925a2b3.zip | |
Diffstat (limited to 'driver.c')
| -rw-r--r-- | driver.c | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/driver.c b/driver.c new file mode 100644 index 0000000..ebee4db --- /dev/null +++ b/driver.c @@ -0,0 +1,180 @@ +#include <stdlib.h> +#include "lex.yy.c" +#include "token.h" + +/* yyline = 1 for numbering lines 1 to n */ +int yyline = 1; +int yycolumn = 0; +int yylength = 0; +int yylval = 0; + +/* the string table is one block separated by null terminators + * an int array stores the index of each string + * access the strings with pointer arithmetic */ +char *stringTable; +int stringTableIndices[LIMIT2]; +int nStringsStored = 0; +int nCharsStored = 0; + +int main(int argc, char *argv[]) +{ + int lexReturn; + int i; + + /* initialize string table */ + stringTable = (char *) malloc(LIMIT1 + 1); + strcpy(stringTable,""); + + printf("Line Column Token Index in String Table\n"); + + /* get tokens and print table */ + do { + + lexReturn = yylex(); + + /* printing line and column here so the switch cases are less wordy */ + if (lexReturn != EOFnum) { + printf("%-8d %-12d", yyline, yycolumn); + } + + switch (lexReturn) { + case ANDnum: + printf("%-8s\n","ANDnum"); + break; + case ASSGNnum: + printf("%-8s\n","ASSGNnum"); + break; + case DECLARATIONSnum: + printf("%-8s\n","DECLARATIONSnum"); + break; + case DOTnum: + printf("%-8s\n","DOTnum"); + break; + case ENDDECLARATIONSnum: + printf("%-8s\n","ENDDECLARATIONSnum"); + break; + case EQUALnum: + printf("%-8s\n","EQUALnum"); + break; + case GTnum: + printf("%-8s\n","GTnum"); + break; + case IDnum: + printf("%-8s %d\n","IDnum", yylval); + break; + case INTnum: + printf("%-8s\n","INTnum"); + break; + case LBRACnum: + printf("%-8s\n","LBRACnum"); + break; + case LPARENnum: + printf("%-8s\n","LPARENnum"); + break; + case METHODnum: + printf("%-8s\n","METHODnum"); + break; + case NEnum: + printf("%-8s\n","NEnum"); + break; + case ORnum: + printf("%-8s\n","ORnum"); + break; + case PROGRAMnum: + printf("%-8s\n","PROGRAMnum"); + break; + case RBRACnum: + printf("%-8s\n","RBRACnum"); + break; + case RPARENnum: + printf("%-8s\n","RPARENnum"); + break; + case SEMInum: + printf("%-8s\n","SEMInum"); + break; + case VALnum: + printf("%-8s\n","VALnum"); + break; + case WHILEnum: + printf("%-8s\n","WHILEnum"); + break; + case CLASSnum: + printf("%-8s\n","CLASSnum"); + break; + case COMMAnum: + printf("%-8s\n","COMMAnum"); + break; + case DIVIDEnum: + printf("%-8s\n","DIVIDEnum"); + break; + case ELSEnum: + printf("%-8s\n","ELSEnum"); + break; + case EQnum: + printf("%-8s\n","EQnum"); + break; + case GEnum: + printf("%-8s\n","GEnum"); + break; + case ICONSTnum: + printf("%-8s\n","ICONSTnum"); + break; + case IFnum: + printf("%-8s\n","IFnum"); + break; + case LBRACEnum: + printf("%-8s\n","LBRACEnum"); + break; + case LEnum: + printf("%-8s\n","LEnum"); + break; + case LTnum: + printf("%-8s\n","LTnum"); + break; + case MINUSnum: + printf("%-8s\n","MINUSnum"); + break; + case NOTnum: + printf("%-8s\n","NOTnum"); + break; + case PLUSnum: + printf("%-8s\n","PLUSnum"); + break; + case RBRACEnum: + printf("%-8s\n","RBRACEnum"); + break; + case RETURNnum: + printf("%-8s\n","RETURNnum"); + break; + case SCONSTnum: + printf("%-8s %d\n", "SCONSTnum", yylval); + break; + case TIMESnum: + printf("%-8s\n","TIMESnum"); + break; + case VOIDnum: + printf("%-8s\n","VOIDnum"); + break; + case EOFnum: + printf("%28s\n","EOFnum"); + break; + default: + printf("%-8s\n","bad token"); + } + + } while (lexReturn != 0); + + /* retrieving string table */ + printf("\nString Table: "); + if (nCharsStored > 0) { + for (i=0;i<nStringsStored;i++) { + printf("%s ",stringTable + stringTableIndices[i]); + } + } + + printf("\n\nEnd of File\n"); + + free(stringTable); + +return 0; +} |
