lrama 0.6.10 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gh-pages.yml +46 -0
  3. data/.github/workflows/test.yaml +40 -8
  4. data/.gitignore +1 -0
  5. data/.rdoc_options +2 -0
  6. data/Gemfile +4 -2
  7. data/NEWS.md +125 -30
  8. data/README.md +44 -15
  9. data/Rakefile +13 -1
  10. data/Steepfile +5 -0
  11. data/doc/Index.md +58 -0
  12. data/doc/development/compressed_state_table/main.md +635 -0
  13. data/doc/development/compressed_state_table/parse.output +174 -0
  14. data/doc/development/compressed_state_table/parse.y +22 -0
  15. data/doc/development/compressed_state_table/parser.rb +282 -0
  16. data/lib/lrama/bitmap.rb +4 -1
  17. data/lib/lrama/command.rb +2 -1
  18. data/lib/lrama/context.rb +3 -3
  19. data/lib/lrama/counterexamples/derivation.rb +6 -5
  20. data/lib/lrama/counterexamples/example.rb +7 -4
  21. data/lib/lrama/counterexamples/path.rb +4 -0
  22. data/lib/lrama/counterexamples.rb +19 -9
  23. data/lib/lrama/digraph.rb +30 -0
  24. data/lib/lrama/grammar/binding.rb +47 -15
  25. data/lib/lrama/grammar/parameterizing_rule/rhs.rb +1 -1
  26. data/lib/lrama/grammar/rule.rb +8 -0
  27. data/lib/lrama/grammar/rule_builder.rb +4 -16
  28. data/lib/lrama/grammar/symbols/resolver.rb +4 -0
  29. data/lib/lrama/grammar.rb +10 -5
  30. data/lib/lrama/lexer/grammar_file.rb +8 -1
  31. data/lib/lrama/lexer/location.rb +17 -1
  32. data/lib/lrama/lexer/token/char.rb +1 -0
  33. data/lib/lrama/lexer/token/ident.rb +1 -0
  34. data/lib/lrama/lexer/token/instantiate_rule.rb +6 -1
  35. data/lib/lrama/lexer/token/tag.rb +3 -1
  36. data/lib/lrama/lexer/token/user_code.rb +6 -2
  37. data/lib/lrama/lexer/token.rb +14 -2
  38. data/lib/lrama/lexer.rb +5 -5
  39. data/lib/lrama/logger.rb +4 -0
  40. data/lib/lrama/option_parser.rb +10 -8
  41. data/lib/lrama/options.rb +2 -1
  42. data/lib/lrama/parser.rb +529 -490
  43. data/lib/lrama/state/reduce.rb +2 -3
  44. data/lib/lrama/state.rb +288 -1
  45. data/lib/lrama/states/item.rb +8 -0
  46. data/lib/lrama/states.rb +69 -2
  47. data/lib/lrama/trace_reporter.rb +17 -2
  48. data/lib/lrama/version.rb +1 -1
  49. data/lrama.gemspec +1 -1
  50. data/parser.y +42 -30
  51. data/rbs_collection.lock.yaml +10 -2
  52. data/sig/generated/lrama/bitmap.rbs +11 -0
  53. data/sig/generated/lrama/digraph.rbs +39 -0
  54. data/sig/generated/lrama/grammar/binding.rbs +34 -0
  55. data/sig/generated/lrama/lexer/grammar_file.rbs +28 -0
  56. data/sig/generated/lrama/lexer/location.rbs +52 -0
  57. data/sig/{lrama → generated/lrama}/lexer/token/char.rbs +2 -0
  58. data/sig/{lrama → generated/lrama}/lexer/token/ident.rbs +2 -0
  59. data/sig/{lrama → generated/lrama}/lexer/token/instantiate_rule.rbs +8 -0
  60. data/sig/{lrama → generated/lrama}/lexer/token/tag.rbs +3 -0
  61. data/sig/{lrama → generated/lrama}/lexer/token/user_code.rbs +6 -1
  62. data/sig/{lrama → generated/lrama}/lexer/token.rbs +26 -3
  63. data/sig/generated/lrama/logger.rbs +14 -0
  64. data/sig/generated/lrama/trace_reporter.rbs +25 -0
  65. data/sig/lrama/counterexamples/derivation.rbs +33 -0
  66. data/sig/lrama/counterexamples/example.rbs +45 -0
  67. data/sig/lrama/counterexamples/path.rbs +21 -0
  68. data/sig/lrama/counterexamples/production_path.rbs +11 -0
  69. data/sig/lrama/counterexamples/start_path.rbs +13 -0
  70. data/sig/lrama/counterexamples/state_item.rbs +10 -0
  71. data/sig/lrama/counterexamples/transition_path.rbs +11 -0
  72. data/sig/lrama/counterexamples/triple.rbs +20 -0
  73. data/sig/lrama/counterexamples.rbs +29 -0
  74. data/sig/lrama/grammar/rule_builder.rbs +0 -1
  75. data/sig/lrama/grammar/symbol.rbs +1 -1
  76. data/sig/lrama/grammar/symbols/resolver.rbs +3 -3
  77. data/sig/lrama/grammar.rbs +13 -0
  78. data/sig/lrama/options.rbs +1 -0
  79. data/sig/lrama/state/reduce_reduce_conflict.rbs +2 -2
  80. data/sig/lrama/state.rbs +79 -0
  81. data/sig/lrama/states.rbs +101 -0
  82. metadata +34 -14
  83. data/sig/lrama/bitmap.rbs +0 -7
  84. data/sig/lrama/digraph.rbs +0 -23
  85. data/sig/lrama/grammar/binding.rbs +0 -19
  86. data/sig/lrama/lexer/grammar_file.rbs +0 -17
  87. data/sig/lrama/lexer/location.rbs +0 -26
data/lib/lrama/lexer.rb CHANGED
@@ -16,6 +16,7 @@ module Lrama
16
16
  %union
17
17
  %token
18
18
  %type
19
+ %nterm
19
20
  %left
20
21
  %right
21
22
  %nonassoc
@@ -168,12 +169,11 @@ module Lrama
168
169
  def lex_comment
169
170
  until @scanner.eos? do
170
171
  case
171
- when @scanner.scan(/\n/)
172
- newline
173
- when @scanner.scan(/\*\//)
172
+ when @scanner.scan_until(/[\s\S]*?\*\//)
173
+ @scanner.matched.count("\n").times { newline }
174
174
  return
175
- else
176
- @scanner.getch
175
+ when @scanner.scan_until(/\n/)
176
+ newline
177
177
  end
178
178
  end
179
179
  end
data/lib/lrama/logger.rb CHANGED
@@ -1,15 +1,19 @@
1
+ # rbs_inline: enabled
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Lrama
4
5
  class Logger
6
+ # @rbs (IO out) -> void
5
7
  def initialize(out = STDERR)
6
8
  @out = out
7
9
  end
8
10
 
11
+ # @rbs (String message) -> void
9
12
  def warn(message)
10
13
  @out << message << "\n"
11
14
  end
12
15
 
16
+ # @rbs (String message) -> void
13
17
  def error(message)
14
18
  @out << message << "\n"
15
19
  end
@@ -59,8 +59,8 @@ module Lrama
59
59
  o.separator ''
60
60
  o.separator 'Tuning the Parser:'
61
61
  o.on('-S', '--skeleton=FILE', 'specify the skeleton to use') {|v| @options.skeleton = v }
62
- o.on('-t', 'reserved, do nothing') { }
63
- o.on('--debug', 'display debugging outputs of internal parser') {|v| @options.debug = true }
62
+ o.on('-t', '--debug', 'display debugging outputs of internal parser') {|v| @options.debug = true }
63
+ o.on('-D', '--define=NAME[=VALUE]', Array, "similar to '%define NAME VALUE'") {|v| @options.define = v }
64
64
  o.separator ''
65
65
  o.separator 'Output:'
66
66
  o.on('-H', '--header=[FILE]', 'also produce a header file named FILE') {|v| @options.header = true; @options.header_file = v }
@@ -86,6 +86,7 @@ module Lrama
86
86
  o.on_tail ' automaton display states'
87
87
  o.on_tail ' closure display states'
88
88
  o.on_tail ' rules display grammar rules'
89
+ o.on_tail ' only-explicit-rules display only explicit grammar rules'
89
90
  o.on_tail ' actions display grammar rules with actions'
90
91
  o.on_tail ' time display generation time'
91
92
  o.on_tail ' all include all the above traces'
@@ -136,26 +137,27 @@ module Lrama
136
137
 
137
138
  VALID_TRACES = %w[
138
139
  locations scan parse automaton bitsets closure
139
- grammar rules actions resource sets muscles
140
- tools m4-early m4 skeleton time ielr cex
140
+ grammar rules only-explicit-rules actions resource
141
+ sets muscles tools m4-early m4 skeleton time ielr cex
141
142
  ].freeze
142
143
  NOT_SUPPORTED_TRACES = %w[
143
144
  locations scan parse bitsets grammar resource
144
145
  sets muscles tools m4-early m4 skeleton ielr cex
145
146
  ].freeze
147
+ SUPPORTED_TRACES = VALID_TRACES - NOT_SUPPORTED_TRACES
146
148
 
147
149
  def validate_trace(trace)
148
150
  h = {}
149
151
  return h if trace.empty? || trace == ['none']
150
- supported = VALID_TRACES - NOT_SUPPORTED_TRACES
152
+ all_traces = SUPPORTED_TRACES - %w[only-explicit-rules]
151
153
  if trace == ['all']
152
- supported.each { |t| h[t.to_sym] = true }
154
+ all_traces.each { |t| h[t.gsub(/-/, '_').to_sym] = true }
153
155
  return h
154
156
  end
155
157
 
156
158
  trace.each do |t|
157
- if supported.include?(t)
158
- h[t.to_sym] = true
159
+ if SUPPORTED_TRACES.include?(t)
160
+ h[t.gsub(/-/, '_').to_sym] = true
159
161
  else
160
162
  raise "Invalid trace option \"#{t}\"."
161
163
  end
data/lib/lrama/options.rb CHANGED
@@ -7,10 +7,11 @@ module Lrama
7
7
  :report_file, :outfile,
8
8
  :error_recovery, :grammar_file,
9
9
  :trace_opts, :report_opts,
10
- :diagnostic, :y, :debug
10
+ :diagnostic, :y, :debug, :define
11
11
 
12
12
  def initialize
13
13
  @skeleton = "bison/yacc.c"
14
+ @define = {}
14
15
  @header = false
15
16
  @header_file = nil
16
17
  @report_file = nil