You are on page 1of 33

SUPERIOR UNIVERSITY LAHORE

Faculty of Computer Science & IT


Compiler Construction

PROJECT PROPOSAL& PLAN

SCIENTIFIC CALCULATOR

Project Team
Student Name Student ID Program Contact Email Address
Number
Asfar javed BCSM-F14-252 BSCS 0316-6-80900 Bcsm-f14-
252@superior.edu.pk
Usama Mehmood BCSM-F14-018 BSCS 0320-4825118 Bcsm-f14-
018@superior.edu.pk
Usman Afzal BCSM-F16-119 BSCS 0335-4506049 Bcsm-f16-
119@superior.edu.pk

[Mam Maryam]
([Senior Lecturer])
Project Title: SCIENTIFIC CALCULATOR

Executive Summary
Our main concern related to this project is to develop SCIENTIFIC CALCULATOR which solves
algebraic simple arithmetic operations and works upon the core fundamentals of FLEX
compiler. According to our complete knowledge earned during our semester we will try our
best to accomplished this task in such a way that it can fulfil all requirements.

Introduction
Scientific calculator plays vital role in the field of sciences regarding to numerical calculations in
physics, DNA predictions in biology and also in chemistry for atomic mass calculations as well as
Trigonometry problems, Scientific numbers that have a multiplication by 10 to certain power, Pi
problem, logarithmic problem with base 10 and the natural base etc. Many complex
calculations are made by these simple looking smart calculators within short period. These
calculators are made in many other languages and compilers but we are going to make this
calculator specifically in FLEX. We intend to make scientific calculator as simple as we can for
better understanding of our users and next upcoming students foe the better understanding of
FLEX compiler.

Problem Statement
As stated above, there is not a single scientific calculator on internet which can solve algebraic
(using x, y, z variable) simple arithmetic (+, -, *, /) problems. we are going to made scientific
calculator which solves these simple arithmetic algebraic problems.

Proposed Solution
The proposed solution to this issue is this that we are going to work on it as per our knowledge
and at least we are going to make a calculator function to solve simple arithmetic (+, -, *, /) of
algebra for upcoming student generation.
1.Regular Expression.
[(0-9)*(x,y,z)+(0+9)+][+,-,*,/][(0-9)*(x,y,z)+(0+9)+]
{[+,-,*,/][(0-9)*(x,y,z)+(0+9)+]}?{[+,-,*,/]
[(0-9)*(x,y,z)+(0+9)+]}?{[+,-,*,/]
[(0-9)*(x,y,z)+(0+9)+]}?
2.Deterministic Finite Automata (DFA)
3.Lexical code
%{
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

%}
%s A B C D E F G H I J K L M N O
%%
<INITIAL>0 BEGIN A;
<INITIAL>1 BEGIN A;
<INITIAL>2 BEGIN A;
<INITIAL>3 BEGIN A;
<INITIAL>4 BEGIN A;
<INITIAL>5 BEGIN A;
<INITIAL>6 BEGIN A;
<INITIAL>7 BEGIN A;
<INITIAL>8 BEGIN A;
<INITIAL>9 BEGIN A;
<INITIAL>x BEGIN B;
<INITIAL>y BEGIN B;
<INITIAL>z BEGIN B;
<INITIAL>[^0\n] BEGIN O;

<INITIAL>\n BEGIN INITIAL; {printf("Not-Accepted\n");}

<A>0 BEGIN A;
<A>1 BEGIN A;
<A>2 BEGIN A;
<A>3 BEGIN A;
<A>4 BEGIN A;
<A>5 BEGIN A;
<A>6 BEGIN A;
<A>7 BEGIN A;
<A>8 BEGIN A;
<A>9 BEGIN A;
<A>x BEGIN B;
<A>y BEGIN B;
<A>z BEGIN B;
<A>"+" BEGIN C;
<A>"-" BEGIN C;
<A>"*" BEGIN C;
<A>"/" BEGIN C;

<A>\n BEGIN INITIAL; {printf("Not-Accepted\n");}


<B>"+" BEGIN C;
<B>"-" BEGIN C;
<B>"*" BEGIN C;
<B>"/" BEGIN C;
<B>[^0\n] BEGIN O;

<B>\n BEGIN INITIAL; {printf("Not-Accepted\n");}


<C>0 BEGIN D;
<C>1 BEGIN D;
<C>2 BEGIN D;
<C>3 BEGIN D;
<C>4 BEGIN D;
<C>5 BEGIN D;
<C>6 BEGIN D;
<C>7 BEGIN D;
<C>8 BEGIN D;
<C>9 BEGIN D;
<C>x BEGIN E;
<C>y BEGIN E;
<C>z BEGIN E;
<C>[^0\n] BEGIN O;

<C>\n BEGIN INITIAL; {printf("Not-Accepted\n");}


<D>0 BEGIN D;
<D>1 BEGIN D;
<D>2 BEGIN D;
<D>3 BEGIN D;
<D>4 BEGIN D;
<D>5 BEGIN D;
<D>6 BEGIN D;
<D>7 BEGIN D;
<D>8 BEGIN D;
<D>9 BEGIN D;
<D>x BEGIN E;
<D>y BEGIN E;
<D>z BEGIN E;
<D>"+" BEGIN F;
<D>"-" BEGIN F;
<D>"*" BEGIN F;
<D>"/" BEGIN F;

<D>\n BEGIN INITIAL; {printf("Accepted\n");}

<E>"+" BEGIN F;
<E>"-" BEGIN F;
<E>"*" BEGIN F;
<E>"/" BEGIN F;
<E>[^0\n] BEGIN O;

<E>\n BEGIN INITIAL; {printf("Accepted\n");}


<F>0 BEGIN G;
<F>1 BEGIN G;
<F>2 BEGIN G;
<F>3 BEGIN G;
<F>4 BEGIN G;
<F>5 BEGIN G;
<F>6 BEGIN G;
<F>7 BEGIN G;
<F>8 BEGIN G;
<F>9 BEGIN G;
<F>x BEGIN H;
<F>y BEGIN H;
<F>z BEGIN H;
<F>[^0\n] BEGIN O;

<F>\n BEGIN INITIAL; {printf("Not-Accepted\n");}


<G>0 BEGIN G;
<G>1 BEGIN G;
<G>2 BEGIN G;
<G>3 BEGIN G;
<G>4 BEGIN G;
<G>5 BEGIN G;
<G>6 BEGIN G;
<G>7 BEGIN G;
<G>8 BEGIN G;
<G>9 BEGIN G;
<G>x BEGIN H;
<G>y BEGIN H;
<G>z BEGIN H;
<G>"+" BEGIN I;
<G>"-" BEGIN I;
<G>"*" BEGIN I;
<G>"/" BEGIN I;

<G>\n BEGIN INITIAL; {printf("Accepted\n");}


<H>"+" BEGIN I;
<H>"-" BEGIN I;
<H>"*" BEGIN I;
<H>"/" BEGIN I;
<H>[^0\n] BEGIN O;
<H>\n BEGIN INITIAL; {printf("Accepted\n");}
<I>0 BEGIN J;
<I>1 BEGIN J;
<I>2 BEGIN J;
<I>3 BEGIN J;
<I>4 BEGIN J;
<I>5 BEGIN J;
<I>6 BEGIN J;
<I>7 BEGIN J;
<I>8 BEGIN J;
<I>9 BEGIN J;
<I>x BEGIN K;
<I>y BEGIN K;
<I>z BEGIN K;
<I>[^0\n] BEGIN O;

<I>\n BEGIN INITIAL; {printf("Not-Accepted\n");}


<J>0 BEGIN J;
<J>1 BEGIN J;
<J>2 BEGIN J;
<J>3 BEGIN J;
<J>4 BEGIN J;
<J>5 BEGIN J;
<J>6 BEGIN J;
<J>7 BEGIN J;
<J>8 BEGIN J;
<J>9 BEGIN J;
<J>x BEGIN K;
<J>y BEGIN K;
<J>z BEGIN K;
<J>"+" BEGIN L;
<J>"-" BEGIN L;
<J>"*" BEGIN L;
<J>"/" BEGIN L;
<J>\n BEGIN INITIAL; {printf("Accepted\n");}
<K>"+" BEGIN L;
<K>"-" BEGIN L;
<K>"*" BEGIN L;
<K>"/" BEGIN L;
<K>[^0\n] BEGIN O;

<K>\n BEGIN INITIAL; {printf("Accepted\n");}


<L>0 BEGIN M;
<L>1 BEGIN M;
<L>2 BEGIN M;
<L>3 BEGIN M;
<L>4 BEGIN M;
<L>5 BEGIN M;
<L>6 BEGIN M;
<L>7 BEGIN M;
<L>8 BEGIN M;
<L>9 BEGIN M;
<L>x BEGIN N;
<L>y BEGIN N;
<L>z BEGIN N;
<L>[^0\n] BEGIN O;
<L>\n BEGIN INITIAL; {printf("Not-Accepted\n");}
<M>0 BEGIN M;
<M>1 BEGIN M;
<M>2 BEGIN M;
<M>3 BEGIN M;
<M>4 BEGIN M;
<M>5 BEGIN M;
<M>6 BEGIN M;
<M>7 BEGIN M;
<M>8 BEGIN M;
<M>9 BEGIN M;
<M>x BEGIN N;
<M>y BEGIN N;
<M>z BEGIN N;
<M>[^0\n] BEGIN O;

<M>\n BEGIN INITIAL; {printf("Accepted\n");}


<N>[^0\n] BEGIN O;

<N>\n BEGIN INITIAL; {printf("Accepted\n");}


<O>0 BEGIN O;
<O>1 BEGIN O;
<O>2 BEGIN O;
<O>3 BEGIN O;
<O>4 BEGIN O;
<O>5 BEGIN O;
<O>6 BEGIN O;
<O>7 BEGIN O;
<O>8 BEGIN O;
<O>9 BEGIN O;
<O>"+" BEGIN O;
<O>"-" BEGIN O;
<O>"*" BEGIN O;
<O>"/" BEGIN O;
<O>x BEGIN O;
<O>y BEGIN O;
<O>z BEGIN O;

<O>\n BEGIN INITIAL; {printf("Invalid\n");}


%%
int main()
{
printf("Enter Regular Expression:\n");
yylex();
return 0;
}
Regular Results/Outputs:
Expression:

2x+5y Accepted
8x-z Accepted
50y*5y Accepted
/2y Invalid
2x* Not-Accepted
10x-25y*5200z Accepted
2x/5z Accepted
2x/ Not-Accepted
50y/x Accepted
20x*2y*55z Accepted
80x+55y/900z Accepted
*2z Invalid
500z- Not-Accepted
2y/* Invalid
2y/5y Accepted
20x*/5z Invalid
2x Not-Accepted
5xy Invalid
2x*8y/ Not-Accepted
4.Context Free Grammar (CFG)

S-> XDX|XDXDX|XDXDXDX|XDXDXDXDX
D-> +|-|*|/
X-> AB|C
A->0A|1A|2A|3A|4A|5A|6A|7A|8A|9A|^
B-> x|y|z
C->0C|1C|2C|3C|4C|5C|6C|7C|8C|9C|0|1|2|3|4|5|6|7|8|9
5.Stack implementation (parser table or relational table)

First and follow function:

FIRST() FOLLOW()
S->XDX|XDXDX| 0,1,2,3….9.x, y, z $
XDXDXDX|XDXDXDXDX

D->+|-|*|/ +,-,*,/ 0,1,2,3….9.x, y, z

X->AB|C 0,1,2,3….9.x, y, z +,-,*,/

A->0A|1A|……..9A|^ 0,1,2,3…..9, ∈ x, y, z
B->x, y, z x, y, z +,-,*,/
C-0C|1C|…..9C 0,1, 2,…….9 +,-,*,/
|0|1……..9
PARSING TABLE LL (1):

S->XDX|XDXDX|XDXDXDX
PARSER TREE:
EXAMPLE:1 X+X

X D X
+
A B A B

∈ x ∈ x

EXAMPLE: X-X

X D X
-
A B A B

∈ x ∈ x
EXAMPLE: X*X

X D X
*
A B A B

∈ x ∈ x

EXAMPLE: X/X

X D X
/
A B A B

∈ x ∈ x
STACK IMPLEMENTATION:

$ S

$ S X D X
$ S X D X B A
$ S X D X B A
$ S X D X B A X

$ S X D X B A X
$ S X D X B A X +

$ S X D X B A X +
$ S X D X B A X + B A

$ S X D X B A X + B A

$ S X D X B A X + B A Y

$ S X D X B A X + B A Y
S

D D D x
X / x + X *

C A B A B A B

∈ y ∈ y ∈ x
6. Add semantic analysis of your Grammar.

S-> XDX{ S value = X value .D operation. Xvalue;}


|XDXDX{ S value = X value .D operation. Xvalue D operation.X value;}
|XDXDXDXDX{ S value = X value .D operation. Xvalue D operation.
X value .D operation .X value . D operation X value;}

D-> + { D value = addition operation b/w operands;}


|-{ D Value =subtraction operation b/w operands;}
|*{ D value =multiplication operation b/w operands;}
|/{ D value =Division operation b/w operands;}
X-> AB{X value =A value . B value;}
|C {X value = C value;}
A-> 0A{A value =0.A value;}
|1A{A value =1.A value;}
|2A{A value =2.A value;}
|3A{A value =3.A value;}
|4A{A value =4.A value;}
|5A{A value =5.A value;}
|6A{A value =6.A value;}
|7A{A value =7.A value;}
|8A{A value =8.A value;}
|9A{A value =9.A value;}
|^{A value = Null or ∈;}
B-> x {B value = x;}
|y{B value =y;}
|z{B value =z;}
C->0C {C value= 0.C value;}
|1C {C value= 1.C value;}
|2C {C value= 2.C value;}
|3C {C value= 3.C value;}
|4C {C value= 4.C value;}
|5C {C value= 5.C value;}
|6C {C value= 6.C value;}
|7C {C value= 7.C value;}
|8C {C value= 8.C value;}
|9C {C value= 9.C value;}
|0 {C value = 0;}
|1 {C value = 1;}
|2 {C value = 2;}
|3 {C value =3;}
|4 {C value = 4;}
|5 {C value = 5;}
|6 {C value = 6;}
|7 {C value = 7;}
|8 {C value = 8;}
|9 {C value = 9;}

Example 1:
X+3X+5

S value=4X+5

D value= D value =
addition operation addition operation

X value=x + + X value =5
X value=3x

A value B value c value =5


A value =3 B value =x

∈ X 3 X 5
Example 2:
X+3X=4X

S value=4x

D value=
Addition operation
X value =x + X value =3x

A value =null B value =x A value=3 B value =x

∈ X 3 X
Example:3
3X * 4 = 12X

S value =12X

D value=
multiplication operation
x value=3X * X value=4

A value=3 B value=X C value =4

3 X 4
Example:4
2Y/2Y

S value=1

D value=
Division operation
X value =2Y / X value =2Y

A value =2 B value =y A value=2 B value =y

2 y 2 y
Dfa manual, Regular expression All paper work.

You might also like