#include <iostream> #include <fstream> #include <stdbool.h> #include<string.h> u
ID: 3699219 • Letter: #
Question
#include <iostream>
#include <fstream>
#include <stdbool.h>
#include<string.h>
using namespace std;
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 << "<ID," << j << "> ";
j++;
}
else if (isInteger(ch))
{
cout << "<INTEGER," << ch << "> ";
}
else if (isFloat(ch))
{
cout << "<FLOAT, " << ch << "> ";
}
else if (ch == "<")
{
cout << "<LT, "nothing"> ";
}
else if (ch == ">")
{
cout << "<GT, "nothing"> ";
}
else if (ch == "<=")
{
cout << "<LE, "nothing"> ";
}
else if (ch == ">=")
{
cout << "<GE, "nothing"> ";
}
else if (ch == "==")
{
cout << "<GE, "nothing"> ";
}
else
{
cout << "<Unknown, "" << ch << "">";
}
seekg(1 * sizeof(char), ios::cur);
}
inputFile.close();
}
int main()
{
char* fileName;
cout << "Enter File Name";
cin >> fileName;
int choice;
do{
cout << "1. lex()" << endl;
cout << "2. Exit()" << endl;
cin >> choice;
if (choice == 1)
{
lex();
}
} while (choice == 1);
return 0;
CAN YOU CORRECT FOR ME I CANT RUN IT ON VISUAL STUDIO IT GIVES FOLLOWING ERRORS
?TS EMERGENCY PLEASE HELP ME
THE PROGRAM IS ABOUT LEXICAL ANALYZER
Error List 0 Warnings 0Messages Search Emor List File ColumnProject Description ? 4 Intellisense too few arguments in function call 3 IntelliSense identifier seekg" is undefined 1 e C3861: 'seekg: identifier not found Line 138 119 Project15 Project15 Project15 Project15 ?2 emor C2660.lex' : function does not take 0 arguments ource.cppExplanation / Answer
//main.cpp
//include header files
#include <iostream>
#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;
int j = 0;
while (!inputFile.eof())
{
inputFile.get(ch, 20, ' ');
if (IsIdentifier(ch))
{
cout << "<ID," << j << "> ";
j++;
}
else if (isInteger(ch))
{
cout << "<INTEGER," << ch << "> ";
}
else if (isFloat(ch))
{
cout << "<FLOAT, " << ch << "> ";
}
else if (ch == "<")
{
cout << "<LT, "nothing"> ";
}
else if (ch == ">")
{
cout << "<GT, "nothing"> ";
}
else if (ch == "<=")
{
cout << "<LE, "nothing"> ";
}
else if (ch == ">=")
{
cout << "<GE, "nothing"> ";
}
else if (ch == "==")
{
cout << "<GE, "nothing"> ";
}
else
{
cout << "<Unknown, "" << ch << "">";
}
//call seekg on inputFile object
inputFile.seekg(1 * sizeof(char), ios::cur);
}
inputFile.close();
}
Note : Run the above file and enter your file name .
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.