From 7d8b3c2c68f602039ffb099d8e3ace8b68250aab Mon Sep 17 00:00:00 2001 From: Ryan Davis Date: Fri, 5 Jan 2024 14:30:04 -0800 Subject: [PATCH] Allow racc cmdline to read from stdin if no path specified. This requires the use of -o to specify where to write but should allow for piping to racc: preprocess_cmd | racc -o lib/parser.rb --- bin/racc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/bin/racc b/bin/racc index 717c9307..2b6d52c1 100755 --- a/bin/racc +++ b/bin/racc @@ -30,7 +30,7 @@ def main profiler = RaccProfiler.new(false) parser = OptionParser.new - parser.banner = "Usage: #{File.basename($0)} [options] " + parser.banner = "Usage: #{File.basename($0)} [options] [input]" parser.on('-o', '--output-file=PATH', 'output file name [.tab.rb]') {|name| output = name @@ -121,21 +121,24 @@ def main $stderr.puts parser.help exit 1 end - if ARGV.empty? - $stderr.puts 'no input' - exit 1 - end if ARGV.size > 1 $stderr.puts 'too many input' exit 1 end - input = ARGV[0] + + input = ARGV[0] || "stdin" + + if input == "stdin" && !output then + $stderr.puts 'You must specify a path to read or use -o for output.' + exit 1 + end begin $stderr.puts 'Parsing grammar file...' if verbose result = profiler.section('parse') { parser = Racc::GrammarFileParser.new(debug_flags) - parser.parse(File.read(input), File.basename(input)) + content = input == "stdin" ? ARGF.read : File.read(input) + parser.parse(content, File.basename(input)) } if check_only $stderr.puts 'syntax ok'