summaryrefslogtreecommitdiff
path: root/simple/simple.rb
diff options
context:
space:
mode:
Diffstat (limited to 'simple/simple.rb')
-rw-r--r--simple/simple.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/simple/simple.rb b/simple/simple.rb
index a31e001..a045347 100644
--- a/simple/simple.rb
+++ b/simple/simple.rb
@@ -178,7 +178,27 @@ class Sequence < Struct.new(:first, :second)
else
reduced_first, reduced_environment = first.reduce(environment)
[Sequence.new(reduced_first, second), reduced_environment]
+ end
+ end
+end
+
+class While < Struct.new(:condition,:body)
+ def to_s
+ "while (#{condition} { #{body} })"
+ end
+
+ def inspect
+ "<#{self}>"
+ end
+
+ def reducible?
+ true
+ end
+
+ def reduce(environment)
+ [If.new(condition,Sequence.new(body,self),DoNothing.new), environment]
end
+end
class Machine < Struct.new(:statement, :environment)
def step