From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/ext/ripper/tools/preproc.rb | 91 ++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 jni/ruby/ext/ripper/tools/preproc.rb (limited to 'jni/ruby/ext/ripper/tools/preproc.rb') diff --git a/jni/ruby/ext/ripper/tools/preproc.rb b/jni/ruby/ext/ripper/tools/preproc.rb new file mode 100755 index 0000000..b2c4461 --- /dev/null +++ b/jni/ruby/ext/ripper/tools/preproc.rb @@ -0,0 +1,91 @@ +# $Id: preproc.rb 25189 2009-10-02 12:04:37Z akr $ + +require 'optparse' + +def main + output = nil + parser = OptionParser.new + parser.banner = "Usage: #{File.basename($0)} [--output=PATH] " + parser.on('--output=PATH', 'An output file.') {|path| + output = path + } + parser.on('--help', 'Prints this message and quit.') { + puts parser.help + exit true + } + begin + parser.parse! + rescue OptionParser::ParseError => err + $stderr.puts err.message + $stderr.puts parser.help + exit false + end + unless ARGV.size == 1 + abort "wrong number of arguments (#{ARGV.size} for 1)" + end + out = "" + File.open(ARGV[0]) {|f| + prelude f, out + grammar f, out + usercode f, out + } + if output + File.open(output, 'w') {|f| + f.write out + } + else + print out + end +end + +def prelude(f, out) + while line = f.gets + case line + when %r + out << '/*' << $/ + when %r + out << '*/' << $/ + when %r<%\*/> + out << $/ + when /\A%%/ + out << '%%' << $/ + return + when /\A%token/ + out << line.sub(/<\w+>/, '') + when /\A%type/ + out << line.sub(/<\w+>/, '') + else + out << line + end + end +end + +def grammar(f, out) + while line = f.gets + case line + when %r + out << '#if 0' << $/ + when %r + out << '/*' << $/ + when %r + out << '*/' << $/ + when %r + out << '#endif' << $/ + when %r<%\*/> + out << $/ + when /\A%%/ + out << '%%' << $/ + return + else + out << line + end + end +end + +def usercode(f, out) + while line = f.gets + out << line + end +end + +main -- cgit v1.2.3