It's very easy to create a new language with ruby, here's a simple DSL
class SleepActivity
def initialize(name)
@name = name
end
def start(&block)
sleep 1
puts "#{@name} goes to bed"
instance_eval &block if block_given?
end
def slumber(&block)
sleep 1
puts "#{@name} is starting to sleep"
instance_eval &block if block_given?
end
def cycle(period, &block)
sleep 1
period.times do |time|
puts "Sleep cycle #{time + 1}:"
instance_eval &block if block_given?
end
end
def awake(duration)
sleep 1
puts "Still awake for #{duration} minutes"
end
def light_sleep(duration)
sleep 1
puts "Sleeping lightly for #{duration} minutes"
end
def deep_sleep(duration)
sleep 1
puts "Sleeping deeply for #{duration} minutes"
end
def rem(duration)
sleep 1
puts "REM for #{duration} minutes"
end
end
if $PROGRAM_NAME == __FILE__
sleep_activity = SleepActivity.new("Sam")
sleep_activity.start do
awake 5
slumber do
cycle 5 do
light_sleep 20
deep_sleep 60
rem 10
end
end
end
end
Here's the output
samdc@mango:~/dev/ruby/projects/dsl$ ruby dsl_interpreter.rb
Sam goes to bed
Still awake for 5 minutes
Sam is starting to sleep
Sleep cycle 1:
Sleeping lightly for 20 minutes
Sleeping deeply for 60 minutes
REM for 10 minutes
Sleep cycle 2:
Sleeping lightly for 20 minutes
Sleeping deeply for 60 minutes
REM for 10 minutes
Sleep cycle 3:
Sleeping lightly for 20 minutes
Sleeping deeply for 60 minutes
REM for 10 minutes
Sleep cycle 4:
Sleeping lightly for 20 minutes
Sleeping deeply for 60 minutes
REM for 10 minutes
Sleep cycle 5:
Sleeping lightly for 20 minutes
Sleeping deeply for 60 minutes
REM for 10 minutes
No comments:
Post a Comment