// mainScan.C
//
// This will test the scanner.
//
// Example: scan sample.p
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include "parser.tab.h"
int yylex();
int main(int argc, char *argv[])
{
int token = 0;
int count = 0;
char *tokenString[100];
char *badToken = "Invalid token";
char fileName[100];
// Initialize character version of tokens
for (int i = 0; i < 100; ++i)
tokenString[i] = badToken;
tokenString[PROGRAMTK -255] = "program";
tokenString[BEGINTK -255] = "begin";
tokenString[ENDTK -255] = "end";
tokenString[SCTK -255] = ";";
tokenString[ASGTK -255] = ":=";
tokenString[DOTTK -255] = ".";
tokenString[IDENTIFIERTK-255] = "<identifier>";
tokenString[NUMLITERALTK-255] = "<literal>";
tokenString[WRITETK -255] = "writeln";
tokenString[LPARENTK -255] = "(";
tokenString[RPARENTK -255] = ")";
tokenString[VARTK -255] = "var";
tokenString[ARRAYTK -255] = "array";
tokenString[RANGETK -255] = "..";
tokenString[OFTK -255] = "of";
tokenString[LOOPTK -255] = "loop";
tokenString[IFTK -255] = "if";
tokenString[THENTK -255] = "then";
tokenString[ELSETK -255] = "else";
tokenString[EXITTK -255] = "exit";
tokenString[COMMATK -255] = ",";
tokenString[COLONTK -255] = ":";
tokenString[LBRACKTK -255] = "[";
tokenString[RBRACKTK -255] = "]";
tokenString[PLUSTK -255] = "+";
tokenString[MINUSTK -255] = "-";
tokenString[STARTK -255] = "*";
tokenString[SLASHTK -255] = "/";
tokenString[LTTK -255] = "<";
tokenString[LETK -255] = "<=";
tokenString[EQTK -255] = "=";
tokenString[NETK -255] = "<>";
tokenString[GETK -255] = ">=";
tokenString[GTTK -255] = ">";
tokenString[INTEGERTK -255] = "integer";
// Get the name of the source file
if (argc < 2) {
cout << "Source program: ";
cin >> fileName;
}
else
strncpy (fileName, argv[1], 80);
// Do nothing if no filename provided
if (strlen(fileName) == 0)
return 0;
// Redirect cin to the source file
if (freopen(fileName, "r", stdin)) {
ios::sync_with_stdio();
}
else {
cerr << "*** Unable to open file " << fileName << endl;
return 1;
}
// Call yylex repeatedly until a dot token is found
while ( /*(count++ < 100) &&*/ (token != DOTTK)) {
token = yylex();
cout << tokenString[token-255] << endl;
}
return 0;
}
|