You are on page 1of 7

Compiler Construction

Lab: #02

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

Ahmed Fayyaz Malik ▷ 01-134192-099

Usama Tayyeb Hashmi ▷ 01-134192-086


Code:
#include<iostream>
#include<fstream>
#include<Windows.h>
using namespace std;

void gotoxy(int x, int y);


void Border(bool change, int i, string name, char opr1, char opr2);
int main()
{
fstream file;
char ch;
char opr1;
int i = 5;
bool side = true;
file.open("Text.txt");
if (file.is_open())
{
while (!file.eof())
{
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
continue;
break;
case '+':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Plus", opr1, ' ');
break;
case '=':
Border(side, i, "Plus_Equal", opr1, ch);
break;
case '+':
Border(side, i, "Increament", opr1, ch);
break;
default:

break;
}
break;
}
case '-':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Minus", opr1, ' ');
break;
case '=':
Border(side, i, "Minus_Equal", opr1, ch);
break;
case '-':
Border(side, i, "Decreament", opr1, ch);
break;
default:

break;
}
break;
}
case '*':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Multiply", opr1, ' ');
break;
case '=':
Border(side, i, "Multiply_Equal", opr1, ch);
break;
default:

break;
}
break;
}
case '/':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Divide", opr1, ' ');
break;
case '=':
Border(side, i, "Divide_Equal", opr1, ch);
break;
default:
break;
}
break;
}
case '<':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Less_Than", opr1, ' ');
break;
case '<':
Border(side, i, "Insertion", opr1, ch);
break;
case '=':
Border(side, i, "Less_Than_Equal", opr1, ch);
break;
default:

break;
}
break;
}
case '>':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Greater_Than", opr1, ' ');
break;
case '>':
Border(side, i, "Exertion", opr1, ch);
break;
case '=':
Border(side, i, "Greater_Than_Equal", opr1, ch);
break;
default:

break;
}
break;
}
case '=':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Assign", opr1, ' ');
break;
case '=':
Border(side, i, "Equal", opr1, ch);
break;
default:

break;
}
break;
}
case '!':
{
opr1 = ch;
file.get(ch);
switch (ch)
{
case ' ':
case '\n':
case '\t':
Border(side, i, "Not", opr1, ' ');
break;
case '=':
Border(side, i, "Not_Equal", opr1, ch);
break;
default:

break;
}
break;
}
case '(':
Border(side, i, "Open_Middle_Bracket", ch, ' ');
break;
case ')':
Border(side, i, "Close_Middle_Bracket", ch, ' ');
break;
case '{':
Border(side, i, "Open_Curly_Bracket", ch, ' ');
break;
case '}':
Border(side, i, "Close_Curly_Bracket", ch, ' ');
break;
case ';':
Border(side, i, "Semi_Colon", ch, ' ');
break;
case ':':
Border(side, i, "Colon", ch, ' ');
break;
case ',':
Border(side, i, "Comma", ch, ' ');
break;
case '%':
Border(side, i, "Mod", ch, ' ');
break;
default:
continue;
break;
}
i += 2;
side = !side;
}
}
else
{
cout << "File Not Opened";
}
return 0;
}
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void Border(bool change, int i, string name, char opr1, char opr2)
{
char topright = 187, bottomright = 188, topleft = 201, bottomleft = 200,
rightleft = 186, topbottom = 205;
int x;
if (change) { x = 10; }
else { x = 60; i -= 2; }
gotoxy(x, i);
cout << topleft;
for (int i = 0; i < 30; i++)
{
if (i != 4) cout << topbottom;
else cout << char(203);
}
cout << topright;
gotoxy(x, i + 1);
cout << rightleft << " " << opr1 << opr2 << " " << rightleft << " " << name;
gotoxy(x + 31, i + 1);
cout << rightleft;
gotoxy(x, i + 2);
cout << bottomleft;
for (int i = 0; i < 30; i++)
{
if (i != 4) cout << topbottom;
else cout << char(202);
}
cout << bottomright;
}
Output:

You might also like