Using C#, implement a console application of the source code of a lexical analyzer (front.c) on page 166 in the textbook. Your console application should receive an input (for example sum + 56/total) and give the similar output like on page 171.
Page 166:
Output on page 171:
/* front.c-a lexical analyzer system for simple arithmetic expressions #include #include
/*Global declarations / /*Variables int charClass; char lexeme [100] char nextChar; int lexLen; int token; int nextToken; FILE *in_fp, *fopen ); Function declarations/ void addChar ) void getChar void getNonBlank () int lex ) /*Character classes #de fine LETTER 0 #de fine DIGIT 1 #de fine UNKNOWN 99 /*Token codes #de fine INT LIT 10 #de fine IDENT 11 #de fine ASSIGN OP 20 #de fine ADD OP 21 #de fine SUB OP 22 #de fine MULT OP 23 #define DIV OP 24 #define LEFT PAREN 25 #define RIGHT PAREN 26 /*main driver main) t / Open the input data file and process its contents if ((in fp -fopen ("front.in", "r")) NULL) printf ("ERROR - cannot open front.in "); else getChar; do lex ) while (nextToken EOF) ; /lookup a function to lookup operators and parentheses and return the token / int lookup (char ch) switch (ch) case '(': addChar ); nextTokenLEFT_PAREN; break; case')': addChar ); nextTokenRIGHT_PAREN; break; case '+' . addChar ); nextToken = ADD OP; break; case '- . addChar ); nextTokenSUB_OP break; case . addChar ); nextToken = MULT-OP; break; case '/' addChar ); nextTokenDIV_OP break; default: addChar); nextToken = EOF; break; return nextToken; /* addChar - a function to add nextChar to lexeme / void addChar ) if (lexLen /*Global declarations / /*Variables int charClass; char lexeme [100] char nextChar; int lexLen; int token; int nextToken; FILE *in_fp, *fopen ); Function declarations/ void addChar ) void getChar void getNonBlank () int lex ) /*Character classes #de fine LETTER 0 #de fine DIGIT 1 #de fine UNKNOWN 99 /*Token codes #de fine INT LIT 10 #de fine IDENT 11 #de fine ASSIGN OP 20 #de fine ADD OP 21 #de fine SUB OP 22 #de fine MULT OP 23 #define DIV OP 24 #define LEFT PAREN 25 #define RIGHT PAREN 26 /*main driver main) t / Open the input data file and process its contents if ((in fp -fopen ("front.in", "r")) NULL) printf ("ERROR - cannot open front.in "); else getChar; do lex ) while (nextToken EOF) ; /lookup a function to lookup operators and parentheses and return the token / int lookup (char ch) switch (ch) case '(': addChar ); nextTokenLEFT_PAREN; break; case')': addChar ); nextTokenRIGHT_PAREN; break; case '+' . addChar ); nextToken = ADD OP; break; case '- . addChar ); nextTokenSUB_OP break; case . addChar ); nextToken = MULT-OP; break; case '/' addChar ); nextTokenDIV_OP break; default: addChar); nextToken = EOF; break; return nextToken; /* addChar - a function to add nextChar to lexeme / void addChar ) if (lexLen