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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!