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.
- checksums.yaml +4 -4
- data/.github/workflows/gh-pages.yml +46 -0
- data/.github/workflows/test.yaml +40 -8
- data/.gitignore +1 -0
- data/.rdoc_options +2 -0
- data/Gemfile +4 -2
- data/NEWS.md +125 -30
- data/README.md +44 -15
- data/Rakefile +13 -1
- data/Steepfile +5 -0
- data/doc/Index.md +58 -0
- data/doc/development/compressed_state_table/main.md +635 -0
- data/doc/development/compressed_state_table/parse.output +174 -0
- data/doc/development/compressed_state_table/parse.y +22 -0
- data/doc/development/compressed_state_table/parser.rb +282 -0
- data/lib/lrama/bitmap.rb +4 -1
- data/lib/lrama/command.rb +2 -1
- data/lib/lrama/context.rb +3 -3
- data/lib/lrama/counterexamples/derivation.rb +6 -5
- data/lib/lrama/counterexamples/example.rb +7 -4
- data/lib/lrama/counterexamples/path.rb +4 -0
- data/lib/lrama/counterexamples.rb +19 -9
- data/lib/lrama/digraph.rb +30 -0
- data/lib/lrama/grammar/binding.rb +47 -15
- data/lib/lrama/grammar/parameterizing_rule/rhs.rb +1 -1
- data/lib/lrama/grammar/rule.rb +8 -0
- data/lib/lrama/grammar/rule_builder.rb +4 -16
- data/lib/lrama/grammar/symbols/resolver.rb +4 -0
- data/lib/lrama/grammar.rb +10 -5
- data/lib/lrama/lexer/grammar_file.rb +8 -1
- data/lib/lrama/lexer/location.rb +17 -1
- data/lib/lrama/lexer/token/char.rb +1 -0
- data/lib/lrama/lexer/token/ident.rb +1 -0
- data/lib/lrama/lexer/token/instantiate_rule.rb +6 -1
- data/lib/lrama/lexer/token/tag.rb +3 -1
- data/lib/lrama/lexer/token/user_code.rb +6 -2
- data/lib/lrama/lexer/token.rb +14 -2
- data/lib/lrama/lexer.rb +5 -5
- data/lib/lrama/logger.rb +4 -0
- data/lib/lrama/option_parser.rb +10 -8
- data/lib/lrama/options.rb +2 -1
- data/lib/lrama/parser.rb +529 -490
- data/lib/lrama/state/reduce.rb +2 -3
- data/lib/lrama/state.rb +288 -1
- data/lib/lrama/states/item.rb +8 -0
- data/lib/lrama/states.rb +69 -2
- data/lib/lrama/trace_reporter.rb +17 -2
- data/lib/lrama/version.rb +1 -1
- data/lrama.gemspec +1 -1
- data/parser.y +42 -30
- data/rbs_collection.lock.yaml +10 -2
- data/sig/generated/lrama/bitmap.rbs +11 -0
- data/sig/generated/lrama/digraph.rbs +39 -0
- data/sig/generated/lrama/grammar/binding.rbs +34 -0
- data/sig/generated/lrama/lexer/grammar_file.rbs +28 -0
- data/sig/generated/lrama/lexer/location.rbs +52 -0
- data/sig/{lrama → generated/lrama}/lexer/token/char.rbs +2 -0
- data/sig/{lrama → generated/lrama}/lexer/token/ident.rbs +2 -0
- data/sig/{lrama → generated/lrama}/lexer/token/instantiate_rule.rbs +8 -0
- data/sig/{lrama → generated/lrama}/lexer/token/tag.rbs +3 -0
- data/sig/{lrama → generated/lrama}/lexer/token/user_code.rbs +6 -1
- data/sig/{lrama → generated/lrama}/lexer/token.rbs +26 -3
- data/sig/generated/lrama/logger.rbs +14 -0
- data/sig/generated/lrama/trace_reporter.rbs +25 -0
- data/sig/lrama/counterexamples/derivation.rbs +33 -0
- data/sig/lrama/counterexamples/example.rbs +45 -0
- data/sig/lrama/counterexamples/path.rbs +21 -0
- data/sig/lrama/counterexamples/production_path.rbs +11 -0
- data/sig/lrama/counterexamples/start_path.rbs +13 -0
- data/sig/lrama/counterexamples/state_item.rbs +10 -0
- data/sig/lrama/counterexamples/transition_path.rbs +11 -0
- data/sig/lrama/counterexamples/triple.rbs +20 -0
- data/sig/lrama/counterexamples.rbs +29 -0
- data/sig/lrama/grammar/rule_builder.rbs +0 -1
- data/sig/lrama/grammar/symbol.rbs +1 -1
- data/sig/lrama/grammar/symbols/resolver.rbs +3 -3
- data/sig/lrama/grammar.rbs +13 -0
- data/sig/lrama/options.rbs +1 -0
- data/sig/lrama/state/reduce_reduce_conflict.rbs +2 -2
- data/sig/lrama/state.rbs +79 -0
- data/sig/lrama/states.rbs +101 -0
- metadata +34 -14
- data/sig/lrama/bitmap.rbs +0 -7
- data/sig/lrama/digraph.rbs +0 -23
- data/sig/lrama/grammar/binding.rbs +0 -19
- data/sig/lrama/lexer/grammar_file.rbs +0 -17
- 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.
|
172
|
-
newline
|
173
|
-
when @scanner.scan(/\*\//)
|
172
|
+
when @scanner.scan_until(/[\s\S]*?\*\//)
|
173
|
+
@scanner.matched.count("\n").times { newline }
|
174
174
|
return
|
175
|
-
|
176
|
-
|
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
|
data/lib/lrama/option_parser.rb
CHANGED
@@ -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', '
|
63
|
-
o.on('
|
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
|
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
|
-
|
152
|
+
all_traces = SUPPORTED_TRACES - %w[only-explicit-rules]
|
151
153
|
if trace == ['all']
|
152
|
-
|
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
|
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
|