Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Project description: Modify the Simple lexer program given in the link below to: Add tokens so that all the tokens in the program from Activity

Project description: Modify the Simple lexer program given in the link below to: Add tokens so that all the tokens in the program from Activity 1 of this module are represented (75 points). The output of your program should specify the type of token in words (Identifier, Keyword ...etc) not a number (25 points). Print each token on a separate line.

Code:

main.cpp file

#include #include

/* Global declarations */ /* Variables */ int charClass; char lexeme [100]; char nextChar; int lexLen; int nextToken; FILE *in_fp;

/* 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 */ int 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); }

return 0; }

/*****************************************************/ /* 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 */

front.in file

(sum + 47)/total

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

Intelligent Databases Technologies And Applications

Authors: Zongmin Ma

1st Edition

1599041219, 978-1599041216

More Books

Students also viewed these Databases questions

Question

8. Name the three catecholamine neurotransmitters.

Answered: 1 week ago

Question

What do Dimensions represent in OLAP Cubes?

Answered: 1 week ago