Skip to content
Paul Götze edited this page Sep 22, 2015 · 1 revision

Examples

or/|| operator:

CodeBreaker.parse("first or second")
CodeBreaker.parse("first || second")
# => {:or=>[[:first], [:second]]}

and/&& operator:

CodeBreaker.parse("first and second")
CodeBreaker.parse("first && second")
# => {:and=>[[:first], [:second]]}

if clause:

CodeBreaker.parse("if fulfilled? then do_something end")
CodeBreaker.parse("do_something if fulfilled?")
# => {:if=>[:fulfilled?], :then=>[:do_something]}

CodeBreaker.parse("if fulfilled? then do_something else do_something_else end")
# => {:if=>[:fulfilled?], :then=>[:do_something], :else=>[:do_something_else]}

CodeBreaker.parse("if a_fulfilled? then do_a elsif b_fulfilled? then do_b end")
# => {:if=>[:a_fulfilled?], :then=>[:do_a], :else=>{:if=>[:b_fulfilled?], :then=>[:do_b]}}

Method definition:

CodeBreaker.parse("def greet\n\nend")
# => {:def=>[:greet, {:args=>[]}]} 

CodeBreaker.parse("def greet\n'Hello!'\nend")
# => {:def=>[:greet, {:args=>[]}, String]}

CodeBreaker.parse("def greet(name)\n'Hello' + name + '!'\nend")
# => {:def=>[:greet, {:args=>[{:arg=>:name}]}, [String, :+, {:lvar=>:name}, :+, String]]}

Module definition:

CodeBreaker.parse("module Breakable\nend")
# => {:module=>[{:const=>:Breakable}]}

CodeBreaker.parse("module Breakable\nCONST = 1\nOTHER_CONST='a'.freeze\nend")
#  => {:module=>[{:const=>:Breakable}, [{:casgn=>[:CONST, Fixnum]}, {:casgn=>[:OTHER_CONST, [String, :freeze]]}]]}  

Return statements:

CodeBreaker.parse("return 3")
# => {:return=>Fixnum}

CodeBreaker.parse("return 3 + 2")
# => {:return=>[Fixnum, :+, Fixnum]}

Yield statements:

CodeBreaker.parse("yield")
# => {:yield=>[]}

CodeBreaker.parse("yield(3, 'beer')")
# => { :yield=>[Fixnum, String]}

While loops:

CodeBreaker.parse("while true == false do\nputs 'You did the impossible!'\nend")
# => {:while=>[TrueClass, :==, FalseClass], :do=>[:puts, String]}

Until loops:

CodeBreaker.parse("until true == false do\nputs 'You did the impossible!'\nend")
# => {:until=>[TrueClass, :==, FalseClass], :do=>[:puts, String]}

For loops:

CodeBreaker.parse("for i in 1..5 do\nputs i\nend")
# => {:for=>{:lvasgn=>[:i]}, :in=>{:irange=>[Fixnum, Fixnum]}, :do=>[:puts, {:lvar=>:i}]} 

Keywords:

CodeBreaker.parse("break")
# => :break

CodeBreaker.parse("next")
# => :next

CodeBreaker.parse("retry")
# => :retry

CodeBreaker.parse("self")
# => :self

Begin/rescue statements:

CodeBreaker.parse("begin puts '' end")
# => {:begin=>[:puts, String]}

CodeBreaker.parse("begin\n  raise Exception.new \nrescue\n  puts 'hm...'\nend")
# => {:begin=>[:raise, {:const=>:Exception}, :new], :rescue=>[:puts, String]}

Case statements:

CodeBreaker.parse("state = :new\ncase state\n  when :new then 1.to_s\n  when :old then 2.to_s\nelse\n 3 end")
# => [
#     {:lvasgn=>[:state, Symbol]}, 
#     {:case=>[{:lvar=>:state}, 
#     {:when=>Symbol, :then=>[Fixnum, :to_s]}, 
#     {:when=>Symbol, :then=>[Fixnum, :to_s]}, 
#     {:else=>Fixnum}]}
#   ]

Clone this wiki locally