Simple DSL implementation for Ripper code generation
input: % ripper: stmts_add(stmts_new, void_stmt) %
output:
VALUE v1, v2; v1 = dispatch0(stmts_new); v2 = dispatch0(void_stmt); $$ = dispatch2(stmts_add, v1, v2);
# File ripper/tools/dsl.rb, line 11 def initialize(code, options) @events = {} @error = options.include?("error") @brace = options.include?("brace") @final = options.include?("final") @vars = 0 # create $1 == "$1", $2 == "$2", ... re, s = "", "" 1.upto(9) do |n| re << "(..)" s << "$#{ n }" end /#{ re }/ =~ s # struct parser_params *p p = "p" @code = "" @last_value = eval(code) end