Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

#include //function prototypes bool isDelimiter(char ch); bool IsIdentifier(char

ID: 3699315 • Letter: #

Question

#include

//function prototypes

bool isDelimiter(char ch);

bool IsIdentifier(char* str);

bool isFloat(char* str);

bool isInteger(char* str);

void lex(char *fileName);

//start of main function

int main()

{

const int size = 80;

char fileName[size];

/*Prompt for file name*/

cout << "Enter File Name : ";

cin >> fileName;

int choice;

//do while loop

do

{

cout << "1. lex()" << endl;

cout << "2. Exit()" << endl;

cin >> choice;

if (choice == 1)

//call lex that takes fileName

lex(fileName);

} while (choice == 1);

system("pause");

return 0;

}

bool isDelimiter(char ch)

{

if (ch == ' ' || ch == '+' || ch == '-' || ch == '*' ||

ch == '/' || ch == ',' || ch == ';' || ch == '>' ||

ch == '<' || ch == '=' || ch == '(' || ch == ')' ||

ch == '[' || ch == ']' || ch == '{' || ch == '}')

return (true);

return (false);

}

bool IsIdentifier(char* str)

{

if (str[0] == '0' || str[0] == '1' || str[0] == '2' ||

str[0] == '3' || str[0] == '4' || str[0] == '5' ||

str[0] == '6' || str[0] == '7' || str[0] == '8' ||

str[0] == '9' || isDelimiter(str[0]) == true)

return (false);

return (true);

}

bool isFloat(char* str)

{

int i, len = strlen(str);

bool hasDecimal = false;

if (len == 0)

return (false);

for (i = 0; i < len; i++) {

if (str[i] != '0' && str[i] != '1' && str[i] != '2'

&& str[i] != '3' && str[i] != '4' && str[i] != '5'

&& str[i] != '6' && str[i] != '7' && str[i] != '8'

&& str[i] != '9' && str[i] != '.' ||

(str[i] == '-' && i > 0))

return (false);

if (str[i] == '.')

hasDecimal = true;

}

return (hasDecimal);

}

bool isInteger(char* str)

{

int i, len = strlen(str);

if (len == 0)

return (false);

for (i = 0; i < len; i++) {

if (str[i] != '0' && str[i] != '1' && str[i] != '2'

&& str[i] != '3' && str[i] != '4' && str[i] != '5'

&& str[i] != '6' && str[i] != '7' && str[i] != '8'

&& str[i] != '9' || (str[i] == '-' && i > 0))

return (false);

}

return (true);

}

void lex(char *fileName)

{

fstream inputFile(fileName, ios::in);

if (!inputFile) {

cout << "Cannot open input file. ";

return;

}

char *ch;

int j = 0;

while (!inputFile.eof())

{

inputFile.get(ch, 20, ' ');

if (IsIdentifier(ch))

{

cout << " ";

}

else if (isFloat(ch))

{

cout << "

}

else if (ch == "<")

{

cout << " ";

}

else if (ch == ">")

{

cout << " ";

}

else if (ch == "<=")

{

cout << " ";

}

else if (ch == ">=")

{

cout << " ";

}

else if (ch == "==")

{

cout << " ";

}

else

{

cout << "";

}

//call seekg on inputFile object

inputFile.seekg(1 * sizeof(char), ios::cur);

}

inputFile.close();

}

CAN YOU SOLVE THIS ERROR ? AND CAN YOU ADD 3RD OPTION IN THE MENU (SEE SYMBOL TABLE)

THE PROGRAM IS ABOUT LEXICAL ANALYZER AND ALSO PLEASE CHECK IF THERE IS ERROR AFTER CORRECTION . THANK YOU

THE PROGRAM MUST BE WRITTEN IN VISUAL STUDIO

Error List ?? Search Enror List * 1 Error ! ! 0warnings | O0Messeges Description ? File Line 113 Column Project 1 erC4700t uninitialized local variable'ch' used

Explanation / Answer

You just have to intialize the variable char *ch to

char *ch=(char*)malloc(sizeof(char)*20);

as this is the only error which is there in the list.

The changed code would be

#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<string.h>
using namespace std;
//function prototypes

bool isDelimiter(char ch);

bool IsIdentifier(char* str);

bool isFloat(char* str);

bool isInteger(char* str);

void lex(char *fileName);

//start of main function

int main()

{

const int size = 80;

char fileName[size];

/*Prompt for file name*/

cout << "Enter File Name : ";

cin >> fileName;

int choice;

//do while loop

do

{

cout << "1. lex()" << endl;

cout << "2. Exit()" << endl;

cin >> choice;

if (choice == 1)

//call lex that takes fileName

lex(fileName);

} while (choice == 1);

system("pause");

return 0;

}

bool isDelimiter(char ch)

{

if (ch == ' ' || ch == '+' || ch == '-' || ch == '*' ||

ch == '/' || ch == ',' || ch == ';' || ch == '>' ||

ch == '<' || ch == '=' || ch == '(' || ch == ')' ||

ch == '[' || ch == ']' || ch == '{' || ch == '}')

return (true);

return (false);

}

bool IsIdentifier(char* str)

{

if (str[0] == '0' || str[0] == '1' || str[0] == '2' ||

str[0] == '3' || str[0] == '4' || str[0] == '5' ||

str[0] == '6' || str[0] == '7' || str[0] == '8' ||

str[0] == '9' || isDelimiter(str[0]) == true)

return (false);

return (true);

}

bool isFloat(char* str)

{

int i, len = strlen(str);

bool hasDecimal = false;

if (len == 0)

return (false);

for (i = 0; i < len; i++) {

if (str[i] != '0' && str[i] != '1' && str[i] != '2'

&& str[i] != '3' && str[i] != '4' && str[i] != '5'

&& str[i] != '6' && str[i] != '7' && str[i] != '8'

&& str[i] != '9' && str[i] != '.' ||

(str[i] == '-' && i > 0))

return (false);

if (str[i] == '.')

hasDecimal = true;

}

return (hasDecimal);

}

bool isInteger(char* str)

{

int i, len = strlen(str);

if (len == 0)

return (false);

for (i = 0; i < len; i++) {

if (str[i] != '0' && str[i] != '1' && str[i] != '2'

&& str[i] != '3' && str[i] != '4' && str[i] != '5'

&& str[i] != '6' && str[i] != '7' && str[i] != '8'

&& str[i] != '9' || (str[i] == '-' && i > 0))

return (false);

}

return (true);

}

void lex(char *fileName)

{

fstream inputFile(fileName, ios::in);

if (!inputFile) {

cout << "Cannot open input file. ";

return;

}

char *ch=(char*)malloc(sizeof(char)*20);

int j = 0;

while (!inputFile.eof())

{

inputFile.get(ch, 20, ' ');

if (IsIdentifier(ch))

{

cout << " ";

}

else if (isFloat(ch))

{

cout << " ";

}

else if (ch == "<")

{

cout << " ";

}

else if (ch == ">")

{

cout << " ";

}

else if (ch == "<=")

{

cout << " ";

}

else if (ch == ">=")

{

cout << " ";

}

else if (ch == "==")

{

cout << " ";

}

else

{

cout << "";

}

//call seekg on inputFile object

inputFile.seekg(1 * sizeof(char), ios::cur);

}

inputFile.close();

}

There was one more change in the isfloat check in the lex function.