Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please do not copy and paste from others' posts. Please attach the output as well: Write the program implementing lexical analyzer in Java. Update the

Please do not copy and paste from others' posts. Please attach the output as well:

Write the program implementing lexical analyzer in Java. Update the code implementing lexical analyzer so that it will recognize the following lexemes: comma (,), semicolon (;) and a reserved word int. Since the original program does not have code for processing an assignment operator, you have to add it.

For submission, run your program twice. The first time your input should be an expression discussed in the textbook:

( sum + 47 ) / total

For this input line your output should be identical to what we see in the book.

The second time use the following line as input:

int a, b = 3;

The code must be written in JAVA:

/* 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 */ #define LETTER 0 #define DIGIT 1 #define UNKNOWN 99

/* Token codes */ #define INT_LIT 10 #define IDENT 11 #define ASSIGN_OP 20 #define ADD_OP 21 #define SUB_OP 22 #define MULT_OP 23 #define DIV_OP 24 #define LEFT_PAREN 25 #define RIGHT_PAREN 26 /******************************************************/ /* main driver */ main() {

/* 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(); nextToken = LEFT_PAREN; break;

case ')': addChar(); nextToken = RIGHT_PAREN; break;

case '+': addChar(); nextToken = ADD_OP; break;

case '-': addChar(); nextToken = SUB_OP; break;

case '*': addChar(); nextToken = MULT_OP; break;

case '/': addChar(); nextToken = DIV_OP; break;

default: addChar(); nextToken = EOF; break; } return nextToken; } /*****************************************************/ /* addChar - a function to add nextChar to lexeme */ void addChar() { if (lexLen <= 98) { lexeme[lexLen++] = nextChar; lexeme[lexLen] = 0; } else printf("Error - lexeme is too long "); } /*****************************************************/ /* getChar - a function to get the next character of input and determine its character class */ void getChar() { if ((nextChar = getc(in_fp)) = EOF) { if (isalpha(nextChar)) charClass = LETTER; else if (isdigit(nextChar)) charClass = DIGIT; else charClass = UNKNOWN; } else charClass = EOF; } /*****************************************************/ /* getNonBlank - a function to call getChar until it returns a non-whitespace character */ void getNonBlank() { while (isspace(nextChar)) getChar(); } / *****************************************************/ /* lex - a simple lexical analyzer for arithmetic expressions */ int lex() { lexLen = 0; getNonBlank(); switch (charClass) { /* Parse identifiers */ case LETTER: addChar(); getChar(); while (charClass == LETTER || charClass == DIGIT) { addChar(); getChar(); } nextToken = IDENT; break;

/* Parse integer literals */ case DIGIT: addChar(); getChar(); while (charClass == DIGIT) { addChar(); getChar(); } nextToken = INT_LIT; break;

/* Parentheses and operators */ case UNKNOWN: lookup(nextChar); getChar(); break;

/* EOF */ case EOF: nextToken = EOF; lexeme[0] = 'E'; lexeme[1] = 'O'; lexeme[2] = 'F'; lexeme[3] = 0; break; } /* End of switch */ printf("Next token is: %d, Next lexeme is %s ", nextToken, lexeme); return nextToken; } /* End of function lex */

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Advances In Databases 11th British National Conference On Databases Bncod 11 Keele Uk July 7 9 1993 Proceedings Lncs 696

Authors: Michael F. Worboys ,Anna F. Grundy

1993rd Edition

3540569219, 978-3540569213

More Books

Students also viewed these Databases questions

Question

=+3. What are the organization's task goals on this issue?

Answered: 1 week ago

Question

explain what is meant by the terms unitarism and pluralism

Answered: 1 week ago