类 DSL
输入: /*% ripper: stmts_add(stmts_new, void_stmt) %*/ 输出
VALUE v1, v2; v1 = dispatch0(stmts_new); v2 = dispatch0(void_stmt); $$ = dispatch2(stmts_add, v1, v2);
-
代码必须是一行。
-
代码本质上是 Ruby 代码,即使它看起来像 C 语言,并且结果将被视为 C 语言处理。例如,注释需要使用 Ruby 风格。
常量
- NAME_PATTERN
- NOT_REF_PATTERN
- TAG_PATTERN
属性
events[R]
公共类方法
new(code, options) 点击切换源代码
# File ripper/tools/dsl.rb, line 21 def initialize(code, options) @events = {} @error = options.include?("error") @brace = options.include?("brace") if options.include?("final") @final = "p->result" else @final = (options.grep(/\A\$#{NAME_PATTERN}\z/o)[0] || "$$") end @vars = 0 # struct parser_params *p p = p = "p" @code = "" code = code.gsub(%r[\G#{NOT_REF_PATTERN}\K[$@]#{TAG_PATTERN}?#{NAME_PATTERN}]o, '"\&"') @last_value = eval(code) end