lib/lrama/command.rb in lrama-0.6.0 vs lib/lrama/command.rb in lrama-0.6.1

- old
+ new

@@ -1,16 +1,30 @@ module Lrama class Command def run(argv) - options = OptionParser.new.parse(argv) + begin + options = OptionParser.new.parse(argv) + rescue => e + message = e.message + message = message.gsub(/.+/, "\e[1m\\&\e[m") if Exception.to_tty? + abort message + end Report::Duration.enable if options.trace_opts[:time] warning = Lrama::Warning.new text = options.y.read options.y.close if options.y != STDIN - grammar = Lrama::Parser.new(text, options.grammar_file, options.debug).parse + parser = Lrama::Parser.new(text, options.grammar_file, options.debug) + begin + grammar = parser.parse + rescue => e + raise e if options.debug + message = e.message + message = message.gsub(/.+/, "\e[1m\\&\e[m") if Exception.to_tty? + abort message + end states = Lrama::States.new(grammar, warning, trace_state: (options.trace_opts[:automaton] || options.trace_opts[:closure])) states.compute context = Lrama::Context.new(states) if options.report_file @@ -37,10 +51,10 @@ error_recovery: options.error_recovery, ).render end if warning.has_error? - exit 1 + exit false end end end end