Skip to content

Commit

Permalink
Merge pull request #375 from nobu/valid-option-arguments
Browse files Browse the repository at this point in the history
Show valid arguments for command line options
  • Loading branch information
yui-knk authored Feb 15, 2024
2 parents a78e78e + 33d2760 commit 6049b75
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 12 deletions.
37 changes: 25 additions & 12 deletions lib/lrama/option_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,18 @@ def parse_by_option_parser(argv)
o.on('-H', '--header=[FILE]', 'also produce a header file named FILE') {|v| @options.header = true; @options.header_file = v }
o.on('-d', 'also produce a header file') { @options.header = true }
o.on('-r', '--report=THINGS', Array, 'also produce details on the automaton') {|v| @report = v }
o.on_tail ''
o.on_tail 'Valid Reports:'
o.on_tail " #{VALID_REPORTS.join(' ')}"

o.on('--report-file=FILE', 'also produce details on the automaton output to a file named FILE') {|v| @options.report_file = v }
o.on('-o', '--output=FILE', 'leave output to FILE') {|v| @options.outfile = v }

o.on('--trace=THINGS', Array, 'also output trace logs at runtime') {|v| @trace = v }
o.on_tail ''
o.on_tail 'Valid Traces:'
o.on_tail " #{VALID_TRACES.join(' ')}"

o.on('-v', 'reserved, do nothing') { }
o.separator ''
o.separator 'Error Recovery:'
Expand All @@ -75,28 +84,30 @@ def parse_by_option_parser(argv)
o.separator 'Other options:'
o.on('-V', '--version', "output version information and exit") {|v| puts "lrama #{Lrama::VERSION}"; exit 0 }
o.on('-h', '--help', "display this help and exit") {|v| puts o; exit 0 }
o.separator ''
o.on_tail
o.parse!(argv)
end
end

BISON_REPORTS = %w[states itemsets lookaheads solved counterexamples cex all none]
OTHER_REPORTS = %w[verbose]
NOT_SUPPORTED_REPORTS = %w[cex none]
VALID_REPORTS = BISON_REPORTS + OTHER_REPORTS - NOT_SUPPORTED_REPORTS

def validate_report(report)
bison_list = %w[states itemsets lookaheads solved counterexamples cex all none]
others = %w[verbose]
list = bison_list + others
not_supported = %w[cex none]
list = VALID_REPORTS
h = { grammar: true }

report.each do |r|
if list.include?(r) && !not_supported.include?(r)
if list.include?(r)
h[r.to_sym] = true
else
raise "Invalid report option \"#{r}\"."
end
end

if h[:all]
(bison_list - not_supported).each do |r|
(BISON_REPORTS - NOT_SUPPORTED_REPORTS).each do |r|
h[r.to_sym] = true
end

Expand All @@ -106,12 +117,14 @@ def validate_report(report)
return h
end

VALID_TRACES = %w[
none locations scan parse automaton bitsets
closure grammar rules resource sets muscles tools
m4-early m4 skeleton time ielr cex all
]

def validate_trace(trace)
list = %w[
none locations scan parse automaton bitsets
closure grammar rules resource sets muscles tools
m4-early m4 skeleton time ielr cex all
]
list = VALID_TRACES
h = {}

trace.each do |t|
Expand Down
6 changes: 6 additions & 0 deletions spec/lrama/option_parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@
-V, --version output version information and exit
-h, --help display this help and exit
Valid Reports:
states itemsets lookaheads solved counterexamples all verbose
Valid Traces:
none locations scan parse automaton bitsets closure grammar rules resource sets muscles tools m4-early m4 skeleton time ielr cex all
HELP
end
end
Expand Down

0 comments on commit 6049b75

Please sign in to comment.