diff options
author | Nat Lasseter <Nat Lasseter user@4574.co.uk> | 2018-02-15 14:50:59 +0000 |
---|---|---|
committer | Nat Lasseter <Nat Lasseter user@4574.co.uk> | 2018-02-15 14:50:59 +0000 |
commit | bfed3dfba46a3f39389bdb529e021e266128df67 (patch) | |
tree | e624950a22a25c66b3ef83c9f2af99d6aac3e616 /parse.rb |
Initial Commit
Diffstat (limited to 'parse.rb')
-rw-r--r-- | parse.rb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/parse.rb b/parse.rb new file mode 100644 index 0000000..5fcfad2 --- /dev/null +++ b/parse.rb @@ -0,0 +1,44 @@ +def sub_vars(string) + outvars = [] + blockvars = [] + vars = string.split(",").map(&:strip) + vars.each do |var| + if var =~ /[a-z_][a-zA-Z0-9_]*?/ then + outvars << "Patter::Var" + blockvars << var + else + outvars << var + end + end + return outvars.join(", "), blockvars.join(", ") +end + +def sub_funs(string, funs) + funs.each do |fun| + string.gsub!(/#{fun}\((.*?)\)/, "#{fun}.call(\\1)") + end + return string +end + +lines = $stdin.readlines.map(&:chomp) +funs = [] + +puts "require './patter'" +puts + +lines.each do |line| + if line =~ /\s*([a-z_][a-zA-Z0-9_]*?)\((.*)\) is\s*$/ then + unless funs.include?($1) then + funs << $1 + puts "#{$1} = Patter::Fun.new" + end + arg, blk = sub_vars($2) + if blk.empty? then + puts "#{$1}.when(#{arg}) do" + else + puts "#{$1}.when(#{arg}) do |#{blk}|" + end + else + puts sub_funs(line, funs) + end +end |