aboutsummaryrefslogtreecommitdiff
path: root/driver.c
diff options
context:
space:
mode:
authorSarah Elizabeth Higbee <Madchen@fq-130-49-43-231.wireless.pitt.edu>2017-03-14 12:28:34 -0400
committerSarah Elizabeth Higbee <Madchen@fq-130-49-43-231.wireless.pitt.edu>2017-03-14 12:28:34 -0400
commit1bb37b1f9f351100ff628cbfb56f6cf52925a2b3 (patch)
tree457884bdd2814304f1295cd23df7b912c790b495 /driver.c
parent605fb8c0af874cb00b8b3060063ab297ce4410fb (diff)
downloadcoe1622-1bb37b1f9f351100ff628cbfb56f6cf52925a2b3.tar.gz
coe1622-1bb37b1f9f351100ff628cbfb56f6cf52925a2b3.tar.bz2
coe1622-1bb37b1f9f351100ff628cbfb56f6cf52925a2b3.zip
mah lexerHEADmaster
Diffstat (limited to 'driver.c')
-rw-r--r--driver.c180
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;
+}