-
Notifications
You must be signed in to change notification settings - Fork 0
Keywords
Paul Götze edited this page Sep 22, 2015
·
1 revision
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")
# => :selfBegin/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}]}
# ]