Question: // CS4303 Programming Language Concepts // Lab exercise - Parser // // Name ______________________ ID _____________________ // // A simple parser for C/C++-style variable declarations.
// CS4303 Programming Language Concepts
// Lab exercise - Parser
//
// Name ______________________ ID _____________________
//
// A simple parser for C/C++-style variable declarations.
// THe grammar is as follows:
//
// ::= ; | = ;
// ::= int | float
// ::= A | B | C | D | E
// ::= |
// ::= |
// ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
// ::= .
//
// Input is entered at the keyboard.
// If the input is correct, the program should print
// "no error found", otherwise, it should print the type
// of error and terminate its execution. There are four
// possible errors:
//
// "unrecognizable type"
// "illegal variable name"
// "unexpected number"
// "; expected"
//
// Error message is printed out by calling function
// "error". An error code ranging from 0 to 4 can be
// passed as an argument to the function indicating what
// message is to be printed. The mapping from the error
// code to the message can be found by looking at the
// definition of function "error".
//
// The following are some sample input and the response
// from the program:
//
// Please enter a declaration in format [= number] ;
// int A;
// no error found
//
// Please enter a declaration in format [= number] ;
// int a;
// illegal variable name
//
// Please enter a declaration in format [= number] ;
// short B;
// unrecognizable type
//
// Please enter a declaration in format [= number] ;
// float C = 0.5;
// no error found
//
// Please enter a declaration in format [= number] ;
// int A = 10,
// unexpected token
#include
#include
using namespace std;
string token;
string GetToken();
void error(int);
int main() {
cout << "Please enter a declaration in format "
<< " [= number] ;" << endl;
token = GetToken();
// Write the code here
error(0);
system("pause");
return 0;
}
string GetToken()
{.
string token;
string error;
bool goToken = true;
char ch;
while (goToken == true)
{
cin.get(ch);
while (ch == ' ')
{
cin.get(ch);
}
if (isdigit(ch))
{
while (isdigit(ch))
{
token = token + ch;
cin.get(ch);
if (ch == '.')
{
token = token + ch;
cin.get(ch);
}
if (ch == ';')
{
token = token + ' ' + ch;
cin.get(ch);
}
if (ch == '#')
{
token = token + ' ' + ch + ':' + " Error: Unrecognizable token";
}
}
goToken = false;
}
else
{
token = token + ch;
if (token == "i")
{
goToken = true;
}
else if (token == "in")
{
goToken = true;
}
else if (token == "int")
{
goToken = false;
}
else if (token == "f")
{
goToken = true;
}
else if (token == "fl")
{
goToken = true;
}
else if (token == "flo")
{
goToken = true;
}
else if (token == "floa")
{
goToken = true;
}
else if (token == "float")
{
goToken = false;
}
else if (token == "A" || token == "B" || token == "C" || token == "D" || token == "E")
{
goToken = false;
}
else if (token == "=")
{
goToken = false;
}
else if (token == ";")
{
goToken = false;
}
else if (token == " ")
{
token = "";
goToken = false;
}
else
{
token = token + ':' + " Error: Unrecognizable token";
goToken = false;
}
}
}
return token;
}
void error(int code) {
switch (code) {
case 0: cout << "no errors found" << endl; break;
case 1: cout << "unrecognizable type" << endl; break;
case 2: cout << "illegal variable name" << endl; break;
case 3: cout << "unexpected number" << endl; break;
case 4: cout << "; expected" << endl;
}
return;
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
