diff options
Diffstat (limited to 'simple')
-rw-r--r-- | simple/simple.rb | 20 |
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 |