c639f14f730b8bc04d81a1b5eec636576b72246a
1 import minilang_test_parser
5 var stack
= new Array[Int]
6 var bstack
= new Array[Bool]
7 var vars
= new HashMap[String, Int]
9 redef fun visit
(n
) do n
.accept_calculator
(self)
13 fun accept_calculator
(v
: Interpretor) do visit_children
(v
)
17 redef fun accept_calculator
(v
) do v
.stack
.push
(text
.to_i
)
21 redef fun accept_calculator
(v
) do
23 v
.vars
[n_id
.text
] = v
.stack
.pop
28 redef fun accept_calculator
(v
) do
33 redef class Ns_print_str
34 redef fun accept_calculator
(v
) do
36 text
= text
.substring
(1, text
.length-2
)
40 redef class Ns_println
41 redef fun accept_calculator
(v
) do
46 redef fun accept_calculator
(v
) do
52 if nelse
!= null then v
.enter_visit
(nelse
)
57 redef fun accept_calculator
(v
) do
60 if not v
.bstack
.pop
then break
61 v
.enter_visit
(n_stmts
)
68 redef fun accept_calculator
(v
) do
72 v
.bstack
.push
(b1
and b2
)
77 redef fun accept_calculator
(v
) do
81 v
.bstack
.push
(b1
or b2
)
86 redef fun accept_calculator
(v
) do
88 v
.bstack
.push
(not v
.bstack
.pop
)
93 redef fun accept_calculator
(v
) do
95 v
.bstack
.push
(v
.stack
.pop
== v
.stack
.pop
)
100 redef fun accept_calculator
(v
) do
102 v
.bstack
.push
(v
.stack
.pop
!= v
.stack
.pop
)
107 redef fun accept_calculator
(v
) do
109 v
.bstack
.push
(v
.stack
.pop
> v
.stack
.pop
)
114 redef fun accept_calculator
(v
) do
116 v
.bstack
.push
(v
.stack
.pop
>= v
.stack
.pop
)
121 redef fun accept_calculator
(v
) do
123 v
.bstack
.push
(v
.stack
.pop
< v
.stack
.pop
)
128 redef fun accept_calculator
(v
) do
130 v
.bstack
.push
(v
.stack
.pop
<= v
.stack
.pop
)
135 redef fun accept_calculator
(v
) do
137 v
.stack
.push
(v
.stack
.pop
+v
.stack
.pop
)
141 redef fun accept_calculator
(v
) do
144 v
.stack
.push
(v
.stack
.pop-n1
)
148 redef fun accept_calculator
(v
) do
150 v
.stack
.push
(-v
.stack
.pop
)
154 redef fun accept_calculator
(v
) do
156 v
.stack
.push
(v
.stack
.pop
*v
.stack
.pop
)
160 redef fun accept_calculator
(v
) do
163 v
.stack
.push
(v
.stack
.pop
/n1
)
167 redef fun accept_calculator
(v
) do
168 v
.stack
.push v
.vars
[n_id
.text
]
172 redef fun accept_calculator
(v
) do
181 var v
= new Interpretor