Skip to content

Commit

Permalink
Small refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexey Gaziev committed Feb 4, 2011
1 parent e28a5b0 commit 3685fe0
Showing 1 changed file with 47 additions and 37 deletions.
84 changes: 47 additions & 37 deletions classes/processor.rb
Expand Up @@ -101,78 +101,83 @@ def state_analyse line
x_s = nil x_s = nil


unless proc.elements.has_key? r unless proc.elements.has_key? r
eval r + ' = Element.new \'' + r + '\'' new_eval r + ' = Element.new \'' + r + '\''
eval r + 'w = State.new \'' + r + '\', ' + r + ', true' new_eval r + 'w = State.new \'' + r + '\', ' + r + ', true'
x_s = r + 'w' x_s = r + 'w'
eval 'x = ' + x_s new_eval 'x = ' + x_s
else else
eval r + ' = proc.elements[\'' + r + '\']' new_eval r + ' = proc.elements[\'' + r + '\']'
end end
eval 'e = ' + r new_eval 'e = ' + r


e = $common_binding.eval('e')

if line.match(/^\/x\d{1,2}h/) if line.match(/^\/x\d{1,2}h/)
eval r + 'h = State.new \'/' + r + 'h\', ' + r + ', false, ' + new_eval r + 'h = State.new \'/' + r + 'h\', ' + r + ', false, ' +
get_prev(line, e) get_prev(line, e)
x_s = r + 'h' x_s = r + 'h'
eval 'x = ' + x_s new_eval 'x = ' + x_s
elsif line.match(/^\/x\d{1,2}[ ]/) elsif line.match(/^\/x\d{1,2}[ ]/)
eval r + 'b = State.new \'/' + r + '\', ' + r + ', false, ' + new_eval r + 'b = State.new \'/' + r + '\', ' + r + ', false, ' +
get_prev(line, e) get_prev(line, e)
x_s = r + 'b' x_s = r + 'b'
eval 'x = ' + x_s new_eval 'x = ' + x_s
elsif line.match(/^\/x\d{1,2}o/) elsif line.match(/^\/x\d{1,2}o/)
eval r + 'o = State.new \'/' + r + 'o\', ' + r + ', false, ' + new_eval r + 'o = State.new \'/' + r + 'o\', ' + r + ', false, ' +
get_prev(line, e) get_prev(line, e)
x_s = r + 'o' x_s = r + 'o'
eval 'x = ' + x_s new_eval 'x = ' + x_s
elsif line.match(/^\/x\d{1,2}a/) elsif line.match(/^\/x\d{1,2}a/)
eval r + 'a = State.new \'/' + r + 'a\', ' + r + ', false, ' + new_eval r + 'a = State.new \'/' + r + 'a\', ' + r + ', false, ' +
get_prev(line, e) get_prev(line, e)
x_s = r + 'a' x_s = r + 'a'
eval 'x = ' + x_s new_eval 'x = ' + x_s
end end

x = $common_binding.eval('x')

# p 'state = ' + x.name + ' :' # p 'state = ' + x.name + ' :'
# x.previous_states.each_key {|pr| p pr} # x.previous_states.each_key {|pr| p pr}
line.scan(/w\d{1,2}[a-z]?\([^\)]+\)/) do |m| line.scan(/w\d{1,2}[a-z]?\([^\)]+\)/) do |m|
# p r + ' - ' + m # p r + ' - ' + m
m.each do |w| # m.each do |w|
if w.match(/w\d{1,2}\(/) if m.match(/w\d{1,2}\(/)
gen_cond = w.match(/\(([^,]+)[,|\)]/) gen_cond = m.match(/\(([^,]+)[,|\)]/)
gen_cond = x.previous_states[gen_cond[1]] gen_cond = x.previous_states[gen_cond[1]]
sec_cond = 'nil' sec_cond = 'nil'
if w.match(/,[ ]?(.+)\)/) if m.match(/,[ ]?(.+)\)/)
sec_cond = w.match(/,[ ]?(.+)\)/)[1] sec_cond = m.match(/,[ ]?(.+)\)/)[1]
end end
ev = nil ev = nil
eval w.match(/^(.+)\(/)[1] + ' = Event.new \'' + w.match(/^(.+)\(/)[1] + new_eval m.match(/^(.+)\(/)[1] + ' = Event.new \'' + m.match(/^(.+)\(/)[1] +
'\', ' + r + ', gen_cond, ' + x_s + ', nil, \'' + sec_cond + '\'' '\', ' + r + ', gen_cond, ' + x_s + ', nil, \'' + sec_cond + '\''
eval 'ev = ' + w.match(/^(.+)\(/)[1] new_eval 'ev = ' + m.match(/^(.+)\(/)[1]
# p ev.name # p ev.name
elsif w.match(/w\d{1,2}[he]\(/) elsif m.match(/w\d{1,2}[he]\(/)
gen_cond = w.match(/\(([^,]+)[,|\)]/) gen_cond = m.match(/\(([^,]+)[,|\)]/)
gen_cond = x.previous_states[gen_cond[1]] gen_cond = x.previous_states[gen_cond[1]]
sec_cond = 'nil' sec_cond = 'nil'
if w.match(/,[ ]?(.+)\)/) if m.match(/,[ ]?(.+)\)/)
sec_cond = w.match(/,[ ]?(.+)\)/)[1] sec_cond = m.match(/,[ ]?(.+)\)/)[1]
end end
ev = nil ev = nil
eval w.match(/^(.+)\(/)[1] + ' = Event.new \'' + w.match(/^(.+)\(/)[1] + new_eval m.match(/^(.+)\(/)[1] + ' = Event.new \'' + m.match(/^(.+)\(/)[1] +
'\', ' + r + ', gen_cond, ' + x_s + ', nil, \'' + sec_cond + '\'' '\', ' + r + ', gen_cond, ' + x_s + ', nil, \'' + sec_cond + '\''
eval 'ev = ' + w.match(/^(.+)\(/)[1] new_eval 'ev = ' + m.match(/^(.+)\(/)[1]
# p ev.name # p ev.name
elsif w.match(/w\d{1,2}[oa]\(/) elsif m.match(/w\d{1,2}[oa]\(/)
gen_cond = w.match(/\(([^,]+)[,|\)]/) gen_cond = m.match(/\(([^,]+)[,|\)]/)
gen_cond = x.previous_states[gen_cond[1]] gen_cond = x.previous_states[gen_cond[1]]
sec_cond = 'nil' sec_cond = 'nil'
if w.match(/,[ ]?(.+)\)/) if m.match(/,[ ]?(.+)\)/)
sec_cond = w.match(/,[ ]?(.+)\)/)[1] sec_cond = m.match(/,[ ]?(.+)\)/)[1]
end end
ev = nil ev = nil
eval w.match(/^(.+)\(/)[1] + ' = Event.new \'' + w.match(/^(.+)\(/)[1] + new_eval m.match(/^(.+)\(/)[1] + ' = Event.new \'' + m.match(/^(.+)\(/)[1] +
'\', ' + r + ', gen_cond, ' + x_s + ', nil, \'' + sec_cond + '\'' '\', ' + r + ', gen_cond, ' + x_s + ', nil, \'' + sec_cond + '\''
eval 'ev = ' + w.match(/^(.+)\(/)[1] new_eval 'ev = ' + m.match(/^(.+)\(/)[1]
# p ev.name # p ev.name
end # end
end end
end end
end end
Expand Down Expand Up @@ -231,12 +236,12 @@ def get_prev(line, element)
cond = Array.new cond = Array.new
line.scan(/w\d{1,2}[a-z]?\([^\)]+\)/) do |m| line.scan(/w\d{1,2}[a-z]?\([^\)]+\)/) do |m|
# p r + ' - ' + m # p r + ' - ' + m
m.each do |w| # m.each do |w|
c = element.states[w.match(/\(([^,]+)[,|\)]/)[1]].name c = element.states[m.match(/\(([^,]+)[,|\)]/)[1]].name
# c = c + 'w' if c.match(/^x\d{1,2}$/) # c = c + 'w' if c.match(/^x\d{1,2}$/)
# c = c[1..(c.length-1)] if c.match(/^\/x\d{1,2}h$/) # c = c[1..(c.length-1)] if c.match(/^\/x\d{1,2}h$/)
cond << c unless cond.include? c cond << c unless cond.include? c
end # end
end end
r = '[' r = '['
cond.each {|c| r += '\'' + c + '\','} cond.each {|c| r += '\'' + c + '\','}
Expand All @@ -260,4 +265,9 @@ def all_elements
def proc def proc
Processor Processor
end end

def new_eval(string)
$common_binding ||= binding
$common_binding = $common_binding.eval string + "; binding"
end
end end

0 comments on commit 3685fe0

Please sign in to comment.