-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpda.rb
120 lines (118 loc) · 4.93 KB
/
pda.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
class Pda
PDA={"EMPTY"=>{"0"=>["NUM","0",""],"1"=>["NUM","1",""],"2"=>["NUM","2",""],"3"=>["NUM","3",""],"4"=>["NUM","4",""],"5"=>["NUM","5",""],"6"=>["NUM","6",""],"7"=>["NUM","7",""],"8"=>["NUM","8",""],"9"=>["NUM","9",""]},
"NUM"=>{"+"=>["+","","+"],"-"=>["-","","-"],"*"=>["*","","*"],"/"=>["/","","/"],"("=>["(","",""],")"=>[")","",""]},
"+"=>{"+"=>["+","POP","+"],"-"=>["-","POP","-"],"*"=>["*","","*"],"/"=>["/","","/"],"("=>["(","","("],")"=>[")","",""],"0"=>["+","0",""],"1"=>["+","1",""],"2"=>["+","2",""],"3"=>["+","3",""],"4"=>["+","4",""],"5"=>["+","5",""],"6"=>["+","6",""],"7"=>["+","7",""],"8"=>["+","8",""],"9"=>["+","9",""]},
"-"=>{"+"=>["+","POP","+"],"-"=>["-","POP","-"],"*"=>["*","","*"],"/"=>["/","","/"],"("=>["(","","("],")"=>[")","",""],"0"=>["-","0",""],"1"=>["-","1",""],"2"=>["-","2",""],"3"=>["-","3",""],"4"=>["-","4",""],"5"=>["-","5",""],"6"=>["-","6",""],"7"=>["-","7",""],"8"=>["-","8",""],"9"=>["-","9",""]},
"*"=>{"+"=>["+","POP","+"],"-"=>["-","POP","-"],"*"=>["*","POP","*"],"/"=>["/","POP","/"],"("=>["(","","("],")"=>[")","",""],"0"=>["*","0",""],"1"=>["*","1",""],"2"=>["*","2",""],"3"=>["*","3",""],"4"=>["*","4",""],"5"=>["*","5",""],"6"=>["*","6",""],"7"=>["*","7",""],"8"=>["*","8",""],"9"=>["*","9",""]},
"/"=>{"+"=>["+","POP","+"],"-"=>["-","POP","-"],"*"=>["*","POP","*"],"/"=>["/","POP","/"],"("=>["(","","("],")"=>[")","",""],"0"=>["/","0",""],"1"=>["/","1",""],"2"=>["/","2",""],"3"=>["/","3",""],"4"=>["/","4",""],"5"=>["/","5",""],"6"=>["/","6",""],"7"=>["/","7",""],"8"=>["/","8",""],"9"=>["/","9",""]},
"("=>{"+"=>["+","POP","+"],"-"=>["-","POP","-"],"*"=>["*","POP","*"],"/"=>["/","POP","/"],"("=>["(","","("],")"=>[")","POP",""],"0"=>["(","0",""],"1"=>["(","1",""],"2"=>["(","2",""],"3"=>["(","3",""],"4"=>["(","4",""],"5"=>["(","5",""],"6"=>["(","6",""],"7"=>["(","7",""],"8"=>["(","8",""],"9"=>["(","9",""]},
")"=>{"+"=>["+","POP","+"],"-"=>["-","POP","-"],"*"=>["*","POP","*"],"/"=>["/","POP","/"],"("=>["(","POP","("],")"=>[")","POP",""],"0"=>[")","0",""],"1"=>[")","1",""],"2"=>[")","2",""],"3"=>[")","3",""],"4"=>[")","4",""],"5"=>[")","5",""],"6"=>[")","6",""],"7"=>[")","7",""],"8"=>[")","8",""],"9"=>[")","9",""]}}
state = "EMPTY"
stack = []
postfix = ""
print("Enter the equation:")
string = gets.chomp
while string.length>0
curchar = string[0]
if curchar=="+"
if(PDA[state][curchar][1]=="POP")
while(stack.size>0)
postfix +=stack.pop
postfix +=" "
end
else
postfix += PDA[state][curchar][1]
end
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
elsif curchar=="-"
if(PDA[state][curchar][1]=="POP")
while(stack.size>0)
postfix +=stack.pop
postfix +=" "
end
else
postfix += PDA[state][curchar][1]
end
postfix += PDA[state][curchar][1]
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
elsif curchar == "*"
if(PDA[state][curchar][1]=="POP")
while(stack.size>0)
postfix +=stack.pop
postfix +=" "
end
else
postfix += PDA[state][curchar][1]
end
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
elsif curchar =="/"
if(PDA[state][curchar][1]=="POP")
while(stack.size>0)
postfix +=stack.pop
postfix +=" "
end
else
postfix += PDA[state][curchar][1]
end
postfix += PDA[state][curchar][1]
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
elsif curchar =="("
if(PDA[state][curchar][1]=="POP")
while(stack.size>0)
char = stack.pop
if char!=")" || char!="("
postfix += char
postfix +=" "
end
end
else
postfix += PDA[state][curchar][1]
end
postfix += PDA[state][curchar][1]
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
elsif curchar ==")"
if(PDA[state][curchar][1]=="POP")
while(stack.size>0)
postfix +=stack.pop
postfix +=" "
end
else
postfix += PDA[state][curchar][1]
end
postfix += PDA[state][curchar][1]
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
else
postfix += PDA[state][curchar][1]
postfix +=" "
if(PDA[state][curchar][2]!="")
stack << PDA[state][curchar][2]
end
state = PDA[state][curchar][0]
end
string = string[1..string.length]
end
while(stack.size>0)
postfix +=stack.pop
postfix +=" "
end
print(postfix)
# Postfix Evaluator
end