Class: Refi::MinilangEnv
- Inherits:
-
Object
- Object
- Refi::MinilangEnv
- Defined in:
- lib/minilang_refi.rb
Constant Summary collapse
- @@rf_cache =
{}
- @@funs =
{ "prepare" => proc{|env,args| env.prepare(args[:n],args[:stmt]) }, "run" => proc{|env,args| next env.prepare_run(args[:n]) }, "set" => proc{|env,args| deref = args[:deref] || [] env.set(args[:n],args[:v],deref) }, "get" => proc{|env,args| next env.get(args[:n]) }, "get_m" => proc{|env,args| next env.get_m(args[:n]) }, "get_l" => proc{|env,args| next env.get_l(args[:n]) }, "get_e" => proc{|env,args| next env.get_e(args[:n]) }, "insert" => proc{|env,args| env.text << args[:v].to_s }, "read_file" => proc{|env,args| pn = args[:pn] rf = @@rf_cache[pn] unless rf rf = env.read_file args[:pn].to_s @@rf_cache[pn] = rf end next rf #next env.read_file args[:pn].to_s }, "print" => proc{|env,args| puts args[:v].to_s }, "pp" => proc{|env,args| pp env }, "concat" => proc{|env,args| ary = args[:ary] concat_str = ary.inject(''){|memo,i| memo << i } next concat_str }, "get_export_type" => proc{|env,args| next env.get_export_type }, "get_keys" => proc{|env,args| m = args[:map] res = m.keys next res }, "regex_select" => proc{|env,args| from = args[:from] where = args[:where] res = [] from.each{|e| if e.match(where) res << e end } next res }, "group" => proc{|env,args| ary = args[:ary].dup ary_size = ary.size amount = args[:amount] fill = args[:fill] res = [] while !ary.empty? res.push ary.shift(amount) end if fill fills = ary_size % amount fills.times{ res[-1].push(fill) } end next res }, "loop" => proc{|env,args| l_var_name = args[:l_var] ary = args[:ary].dup env.create_loop(l_var_name,ary) next nil }, }
Instance Attribute Summary collapse
-
#text ⇒ Object
Returns the value of attribute text.
Instance Method Summary collapse
- #call_fun(fun_name, fun_args) ⇒ Object
- #consume_text ⇒ Object
- #create_loop(l_var_name, ary) ⇒ Object
- #get(name) ⇒ Object
- #get_e(name) ⇒ Object
- #get_l(name) ⇒ Object
- #get_m(name) ⇒ Object
-
#initialize(creator, p) ⇒ MinilangEnv
constructor
A new instance of MinilangEnv.
- #parse_str(str) ⇒ Object
- #prepare(name, str) ⇒ Object
- #prepare_run(name) ⇒ Object
- #pretty_print(pp) ⇒ Object
- #read_file(pn) ⇒ Object
- #run_str(str) ⇒ Object
- #set(var_name, var_value, deref) ⇒ Object
- #set_e(var_name, var_value, deref) ⇒ Object
- #set_iter_var(var_ref, val) ⇒ Object
-
#set_l(var_name, var_value) ⇒ Object
,deref).
- #set_var_map(var_map) ⇒ Object
Constructor Details
#initialize(creator, p) ⇒ MinilangEnv
Returns a new instance of MinilangEnv.
131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/minilang_refi.rb', line 131 def initialize(creator,p) @creator = creator @export_type = p[:export_type] || $Log.tlog({id: 'err1030'}) #dperr( 'E777', 'export type not passed to minilang env init') @text = '' @vars = {} # local @vars_m = {} # var_map @vars_l = {} # loop @vars_e = {} # each @iter_vars = {} @prep_stmts = {} end |
Instance Attribute Details
#text ⇒ Object
Returns the value of attribute text.
130 131 132 |
# File 'lib/minilang_refi.rb', line 130 def text @text end |
Instance Method Details
#call_fun(fun_name, fun_args) ⇒ Object
159 160 161 162 |
# File 'lib/minilang_refi.rb', line 159 def call_fun(fun_name,fun_args) res = @@funs[fun_name].call(self,fun_args) return res end |
#consume_text ⇒ Object
143 144 145 146 147 |
# File 'lib/minilang_refi.rb', line 143 def consume_text t = @text @text = '' return t end |
#create_loop(l_var_name, ary) ⇒ Object
182 183 184 |
# File 'lib/minilang_refi.rb', line 182 def create_loop(l_var_name,ary) @creator.create_loop(l_var_name,ary) end |
#get(name) ⇒ Object
163 164 165 |
# File 'lib/minilang_refi.rb', line 163 def get name return @vars[name] end |
#get_e(name) ⇒ Object
173 174 175 |
# File 'lib/minilang_refi.rb', line 173 def get_e name return @vars_e[name] end |
#get_l(name) ⇒ Object
176 177 178 |
# File 'lib/minilang_refi.rb', line 176 def get_l name return @vars_l[name] end |
#get_m(name) ⇒ Object
166 167 168 169 170 171 172 |
# File 'lib/minilang_refi.rb', line 166 def get_m name unless name return @vars_m else return @vars_m[name] end end |
#parse_str(str) ⇒ Object
229 230 231 232 233 234 235 236 237 238 |
# File 'lib/minilang_refi.rb', line 229 def parse_str str parse_res = MinilangScript.new(str) if(parse_res.valid) return parse_res else dparn 1223, "invalid string (was not executed)" parse_res.report_errors return nil end end |
#prepare(name, str) ⇒ Object
239 240 241 |
# File 'lib/minilang_refi.rb', line 239 def prepare(name,str) @prep_stmts[name] = parse_str(str) end |
#prepare_run(name) ⇒ Object
242 243 244 |
# File 'lib/minilang_refi.rb', line 242 def prepare_run(name) @prep_stmts[name].run(self) end |
#pretty_print(pp) ⇒ Object
151 152 153 154 155 156 157 158 |
# File 'lib/minilang_refi.rb', line 151 def pretty_print(pp) puts "<vars>" pp @vars puts "</vars>" puts "<text>" pp @text puts "</text>" end |
#read_file(pn) ⇒ Object
179 180 181 |
# File 'lib/minilang_refi.rb', line 179 def read_file pn return @creator.read_file pn end |
#run_str(str) ⇒ Object
245 246 247 248 |
# File 'lib/minilang_refi.rb', line 245 def run_str str parse_res = parse_str(str) return parse_res.run(self) end |
#set(var_name, var_value, deref) ⇒ Object
213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/minilang_refi.rb', line 213 def set(var_name,var_value,deref) if deref == [] @vars[var_name] = var_value else v_e = deref.pop v = @vars[var_name] deref.each{|d| v = v[d] } v[v_e] = var_value end return nil end |
#set_e(var_name, var_value, deref) ⇒ Object
185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/minilang_refi.rb', line 185 def set_e(var_name,var_value,deref) if deref == [] @vars_e[var_name] = var_value return else v_e = deref.pop v = @vars_e[var_name] deref.each{|d| v = v[d] } v[v_e] = var_value return end end |
#set_iter_var(var_ref, val) ⇒ Object
226 227 228 |
# File 'lib/minilang_refi.rb', line 226 def set_iter_var(var_ref,val) @iter_vars[var_ref] = val end |
#set_l(var_name, var_value) ⇒ Object
,deref)
199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/minilang_refi.rb', line 199 def set_l(var_name,var_value) #,deref) #if deref == [] @vars_l[var_name] = var_value return #else # v_e = deref.pop # v = @vars_l[var_name] # deref.each{|d| # v = v[d] # } # v[v_e] = var_value # return #end end |
#set_var_map(var_map) ⇒ Object
148 149 150 |
# File 'lib/minilang_refi.rb', line 148 def set_var_map var_map @vars_m = var_map end |