You are on page 1of 15

Compiler Construction

Lab: #03

Group Members:
Toheed Ejaz Khan ▷ 01-134192-108

Ahmed Fayyaz Malik ▷ 01-134192-099

Usama Tayyeb Hashmi ▷ 01-134192-086


Task #01
Code:
#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;

int main()
{
char character;
fstream file;
file.open("TEST.txt");
if (!file.is_open())
{
cout << "Error opening file \n";
}
else
{
while (file.get(character))
{
if (character != '\n' && character != '\t' && character != ' ')
{
if (character == '/')
{
file.get(character);

if (character == '/')
{
while (file.get(character))
{
if (character == '\n')
{
break;
}
}
}
}
if (character == ',')
{
cout << "COMMA\n";
}

else if (character == ';')


{
cout << "SEMCOLON\n";
}

else if (character == '(')


{
cout << "LORB\n";
}

else if (character == ')')


{
cout << "RCRB\n";
}

else if (character == '{')


{
cout << "LOFB\n";
}

else if (character == '}')


{
cout << "RCFB\n";
}

else if (character == '[')


{
cout << "LOSB\n";
}

if (character == ']')
{
cout << "RCSB\n";
}

else if (character == '+')


{
file.get(character);
if (character == '+')
{
cout << "INCREMENT\n";
}

else if (character == '=')


{
cout << "PLUSEQ\n";
}

else
{
//file.putback(character);
cout << "PLUS\n";
}

else if (character == '-')


{
file.get(character);
if (character == '-')
{
cout << "DECREMENT\n";
}
else if (character == '=')
{
cout << "MINUSEQ\n";
}
else
{
//file.putback(character);
cout << "MINUS\n";
}
}

else if (character == '*')


{
cout << "MUL\n";
}

else if (character == '/')


{
cout << "DIV\n";
}

else if (character == ':')


{
cout << "COLON\n";
}

else if (character == '<')


{
file.get(character);
if (character == '<')
{
cout << "CIN\n";
}
else
{
//file.putback(character);
cout << "LESSTH\n";
}

else if (character == '>')


{
file.get(character);
if (character == '>')
{
cout << "COUT\n";
}
else
{
//file.putback(character);
cout << "GREATERTH\n";
}
}

else if (character == '!')


{
file.get(character);
if (character == '=')
{
cout << "EXCEQ\n";
}
else
{
//file.putback(character);
cout << "EXC\n";
}

else if (character == '=')


{
file.get(character);
if (character == '=')
{
cout << "DOUBLEEQ\n";
}
else
{
//file.putback(character);
cout << "EQUAL\n";
}
}

}
}

cout << endl;


}
system("pause");
return 0;
}

Output:
Analysis:
Here is an exception rising at the run time that the last minus sign is getting neglect. It happens because
at the end when code encounter an (-) sign it doesn’t recognize it so we are applying a new technique in
the next task that we are moving the cursor backward once or putting the minus character back into the
file so our code can recognize it.

Text file:

Task #02
Code:
#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;

int main()
{
char character;
fstream file;
file.open("TEST.txt");
if (!file.is_open())
{
cout << "Error opening file \n";
}
else
{
while (file.get(character))
{
if (character != '\n' && character != '\t' && character != ' ')
{
if (character == '/')
{
file.get(character);

if (character == '/')
{
while (file.get(character))
{
if (character == '\n')
{
break;
}
}
}
}
if (character == ',')
{
cout << "COMMA\n";
}

else if (character == ';')


{
cout << "SEMCOLON\n";
}

else if (character == '(')


{
cout << "LORB\n";
}

else if (character == ')')


{
cout << "RCRB\n";
}

else if (character == '{')


{
cout << "LOFB\n";
}

else if (character == '}')


{
cout << "RCFB\n";
}

else if (character == '[')


{
cout << "LOSB\n";
}

if (character == ']')
{
cout << "RCSB\n";
}

else if (character == '+')


{
file.get(character);
if (character == '+')
{
cout << "INCREMENT\n";
}

else if (character == '=')


{
cout << "PLUSEQ\n";
}

else
{
file.putback(character);
cout << "PLUS\n";
}

else if (character == '-')


{
file.get(character);
if (character == '-')
{
cout << "DECREMENT\n";
}
else if (character == '=')
{
cout << "MINUSEQ\n";
}
else
{
file.putback(character);
cout << "MINUS\n";
}
}

else if (character == '*')


{
cout << "MUL\n";
}

else if (character == '/')


{
cout << "DIV\n";
}

else if (character == ':')


{
cout << "COLON\n";
}

else if (character == '<')


{
file.get(character);
if (character == '<')
{
cout << "CIN\n";
}
else
{
file.putback(character);
cout << "LESSTH\n";
}

else if (character == '>')


{
file.get(character);
if (character == '>')
{
cout << "COUT\n";
}
else
{
file.putback(character);
cout << "GREATERTH\n";
}
}

else if (character == '!')


{
file.get(character);
if (character == '=')
{
cout << "EXCEQ\n";
}
else
{
file.putback(character);
cout << "EXC\n";
}

else if (character == '=')


{
file.get(character);
if (character == '=')
{
cout << "DOUBLEEQ\n";
}
else
{
file.putback(character);
cout << "EQUAL\n";
}
}

}
}

cout << endl;


}
system("pause");
return 0;
}
Output:

Analysis:
Now our code is recognizing the negative sign it the text file we use the C++ built in function
{putback(ch)}.
Task #03
Code:
#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;

int main()
{
char character;
fstream file;
file.open("TEST.txt");
if (!file.is_open())
{
cout << "Error opening file \n";
}
else
{
while (file.get(character))
{
if (character != '\n' && character != '\t' && character != ' ')
{
if (character == '/')
{
file.get(character);

if (character == '/')
{
while (file.get(character))
{
if (character == '\n')
{
break;
}
}
}
}
if (character == ',')
{
cout << "COMMA\n";
}

else if (character == ';')


{
cout << "SEMCOLON\n";
}

else if (character == '(')


{
cout << "LORB\n";
}

else if (character == ')')


{
cout << "RCRB\n";
}

else if (character == '{')


{
cout << "LOFB\n";
}

else if (character == '}')


{
cout << "RCFB\n";
}

else if (character == '[')


{
cout << "LOSB\n";
}

if (character == ']')
{
cout << "RCSB\n";
}

else if (character == '+')


{
file.get(character);
if (character == '+')
{
cout << "INCREMENT\n";
}

else if (character == '=')


{
cout << "PLUSEQ\n";
}

else
{
file.putback(character);
cout << "PLUS\n";
}

else if (character == '-')


{
file.get(character);
if (character == '-')
{
cout << "DECREMENT\n";
}
else if (character == '=')
{
cout << "MINUSEQ\n";
}
else
{
file.putback(character);
cout << "MINUS\n";
}
}

else if (character == '*')


{
cout << "MUL\n";
}

else if (character == '/')


{
cout << "DIV\n";
}

else if (character == ':')


{
cout << "COLON\n";
}

else if (character == '<')


{
file.get(character);
if (character == '<')
{
cout << "CIN\n";
}
else
{
file.putback(character);
cout << "LESSTH\n";
}

else if (character == '>')


{
file.get(character);
if (character == '>')
{
cout << "COUT\n";
}
else
{
file.putback(character);
cout << "GREATERTH\n";
}
}

else if (character == '!')


{
file.get(character);
if (character == '=')
{
cout << "EXCEQ\n";
}
else
{
file.putback(character);
cout << "EXC\n";
}

else if (character == '=')


{
file.get(character);
if (character == '=')
{
cout << "DOUBLEEQ\n";
}
else
{
file.putback(character);
cout << "EQUAL\n";
}
}
else if (isdigit(character))
{
string s = " ";

do {
file.get(character);
s += character;

} while (isdigit(character));
file.putback(character);
cout << "NUM\n";
}

}
}

cout << endl;


}
system("pause");
return 0;
}
Output:

THE END.

You might also like