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