aboutsummaryrefslogtreecommitdiff
path: root/parse.rb
diff options
context:
space:
mode:
authorNat Lasseter <Nat Lasseter user@4574.co.uk>2018-02-15 14:50:59 +0000
committerNat Lasseter <Nat Lasseter user@4574.co.uk>2018-02-15 14:50:59 +0000
commitbfed3dfba46a3f39389bdb529e021e266128df67 (patch)
treee624950a22a25c66b3ef83c9f2af99d6aac3e616 /parse.rb
Initial Commit
Diffstat (limited to 'parse.rb')
-rw-r--r--parse.rb44
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