Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Cplus
- extend self
- def debug(str)
- (@data ||= {}).clear
- (@boolean ||= {}).clear
- (@var ||= {}).clear
- @isnt = ->(i, t=0) {
- return false if !(i =~ /int|long|void|char|bool/) and t == 0
- return true
- }
- _parse = parse(str)
- elements
- end
- def parse(stri)
- stri = stri.split(/\n/)
- stri.collect! { |str|
- # type0 ex: int main()
- if str =~ /^(.+)\(\)/im
- raise("Error") unless @isnt[$1]
- @data[($&.to_s + $'.to_s).symbol] = ""
- @boolean[($&.to_s + $'.to_s).symbol] = true
- next
- end
- if @boolean[@boolean.last_key]
- next if str =~ /^{/
- if str =~ /^}/
- @boolean[@boolean.last_key] = false
- next
- else
- @data[@data.last_key] << str + "\n"
- end
- end
- }
- end
- def elements
- @data.keys.collect! { |i|
- if i =~ /(\w+)/i
- if @isnt[$1]
- @data[i].split(/\n/).collect! { |n|
- next puts $1 if n =~ /std::cout << \"(.*)\"\;/i
- next @var[$1.symbol] = $2 if n =~ /int (\w+)=(\d+);/i
- next @var[$1.symbol] = $2 if n =~ /(\w+) = (\d+);/i
- next puts @var[$1.symbol] if n =~ /std::cout << (\w+);/
- next @var[$1.symbol] = String(@var[$1.symbol].to_i.next) if n =~ /(\w+)\++;/
- }
- end
- end
- next
- }
- end
- end
- #~ ss = %q(std::count << "Hello World!\n";)
- #~ s = ->(str) { return $1 if str =~ /std::count << \"(.*)\"\;/i }
- #~ puts s[ss]
- Cplus.debug(%q(
- int main()
- {
- // declaring variables:
- int a;
- int b;
- int result;
- // process:
- a = 5;
- b = 2;
- a++;
- // print out the result:
- std::cout << a;
- std::cout << b;
- }
- ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement