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'