rley 0.8.03 → 0.8.05

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +28 -8
  3. data/CHANGELOG.md +10 -0
  4. data/examples/data_formats/JSON/README.md +34 -0
  5. data/examples/data_formats/JSON/sample01.json +3 -0
  6. data/examples/data_formats/JSON/sample01.svg +36 -0
  7. data/examples/data_formats/JSON/sample02.json +6 -0
  8. data/examples/data_formats/JSON/sample02.svg +128 -0
  9. data/examples/data_formats/JSON/sample03.json +88 -0
  10. data/examples/general/calc_iter1/README.md +26 -0
  11. data/examples/general/calc_iter2/README.md +55 -0
  12. data/examples/general/general_examples.md +37 -0
  13. data/examples/tokenizer/README.md +46 -0
  14. data/examples/tokenizer/loxxy_raw_scanner.rex +98 -0
  15. data/examples/tokenizer/loxxy_raw_scanner.rex.rb +256 -0
  16. data/examples/tokenizer/loxxy_tokenizer.rb +94 -0
  17. data/examples/tokenizer/run_tokenizer.rb +29 -0
  18. data/lib/rley/constants.rb +1 -1
  19. data/lib/rley/lexical/literal.rb +29 -0
  20. data/lib/rley/lexical/token.rb +7 -4
  21. data/lib/rley/syntax/base_grammar_builder.rb +0 -2
  22. data/lib/rley.rb +1 -1
  23. data/spec/rley/lexical/literal_spec.rb +33 -0
  24. data/spec/rley/lexical/token_spec.rb +15 -4
  25. data/spec/rley/notation/grammar_builder_spec.rb +2 -2
  26. data/spec/rley/parser/dangling_else_spec.rb +5 -7
  27. data/spec/rley/parser/gfg_chart_spec.rb +0 -1
  28. data/spec/rley/parser/gfg_earley_parser_spec.rb +131 -134
  29. data/spec/rley/parser/gfg_parsing_spec.rb +1 -2
  30. data/spec/rley/syntax/base_grammar_builder_spec.rb +7 -7
  31. data/spec/rley/syntax/grammar_spec.rb +6 -9
  32. metadata +19 -9
  33. data/lib/rley/parser/parse_tracer.rb +0 -103
  34. data/lib/rley/syntax/literal.rb +0 -20
  35. data/lib/rley/syntax/verbatim_symbol.rb +0 -27
  36. data/spec/rley/syntax/literal_spec.rb +0 -31
  37. data/spec/rley/syntax/verbatim_symbol_spec.rb +0 -38
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rley
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.03
4
+ version: 0.8.05
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-27 00:00:00.000000000 Z
11
+ date: 2021-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -92,6 +92,7 @@ files:
92
92
  - examples/NLP/nano_eng/nano_en_demo.rb
93
93
  - examples/NLP/nano_eng/nano_grammar.rb
94
94
  - examples/NLP/pico_en_demo.rb
95
+ - examples/data_formats/JSON/README.md
95
96
  - examples/data_formats/JSON/cli_options.rb
96
97
  - examples/data_formats/JSON/json_ast_builder.rb
97
98
  - examples/data_formats/JSON/json_ast_nodes.rb
@@ -99,20 +100,33 @@ files:
99
100
  - examples/data_formats/JSON/json_grammar.rb
100
101
  - examples/data_formats/JSON/json_lexer.rb
101
102
  - examples/data_formats/JSON/json_minifier.rb
103
+ - examples/data_formats/JSON/sample01.json
104
+ - examples/data_formats/JSON/sample01.svg
105
+ - examples/data_formats/JSON/sample02.json
106
+ - examples/data_formats/JSON/sample02.svg
107
+ - examples/data_formats/JSON/sample03.json
108
+ - examples/general/calc_iter1/README.md
102
109
  - examples/general/calc_iter1/calc_ast_builder.rb
103
110
  - examples/general/calc_iter1/calc_ast_nodes.rb
104
111
  - examples/general/calc_iter1/calc_demo.rb
105
112
  - examples/general/calc_iter1/calc_grammar.rb
106
113
  - examples/general/calc_iter1/calc_lexer.rb
107
114
  - examples/general/calc_iter1/spec/calculator_spec.rb
115
+ - examples/general/calc_iter2/README.md
108
116
  - examples/general/calc_iter2/calc_ast_builder.rb
109
117
  - examples/general/calc_iter2/calc_ast_nodes.rb
110
118
  - examples/general/calc_iter2/calc_demo.rb
111
119
  - examples/general/calc_iter2/calc_grammar.rb
112
120
  - examples/general/calc_iter2/calc_lexer.rb
113
121
  - examples/general/calc_iter2/spec/calculator_spec.rb
122
+ - examples/general/general_examples.md
114
123
  - examples/general/left.rb
115
124
  - examples/general/right.rb
125
+ - examples/tokenizer/README.md
126
+ - examples/tokenizer/loxxy_raw_scanner.rex
127
+ - examples/tokenizer/loxxy_raw_scanner.rex.rb
128
+ - examples/tokenizer/loxxy_tokenizer.rb
129
+ - examples/tokenizer/run_tokenizer.rb
116
130
  - lib/rley.rb
117
131
  - lib/rley/base/base_parser.rb
118
132
  - lib/rley/base/dotted_item.rb
@@ -137,6 +151,7 @@ files:
137
151
  - lib/rley/gfg/start_vertex.rb
138
152
  - lib/rley/gfg/vertex.rb
139
153
  - lib/rley/interface.rb
154
+ - lib/rley/lexical/literal.rb
140
155
  - lib/rley/lexical/token.rb
141
156
  - lib/rley/lexical/token_range.rb
142
157
  - lib/rley/notation/all_notation_nodes.rb
@@ -166,7 +181,6 @@ files:
166
181
  - lib/rley/parser/parse_entry.rb
167
182
  - lib/rley/parser/parse_entry_set.rb
168
183
  - lib/rley/parser/parse_entry_tracker.rb
169
- - lib/rley/parser/parse_tracer.rb
170
184
  - lib/rley/parser/parse_walker_factory.rb
171
185
  - lib/rley/ptree/non_terminal_node.rb
172
186
  - lib/rley/ptree/parse_tree.rb
@@ -184,13 +198,11 @@ files:
184
198
  - lib/rley/syntax/base_grammar_builder.rb
185
199
  - lib/rley/syntax/grammar.rb
186
200
  - lib/rley/syntax/grm_symbol.rb
187
- - lib/rley/syntax/literal.rb
188
201
  - lib/rley/syntax/match_closest.rb
189
202
  - lib/rley/syntax/non_terminal.rb
190
203
  - lib/rley/syntax/production.rb
191
204
  - lib/rley/syntax/symbol_seq.rb
192
205
  - lib/rley/syntax/terminal.rb
193
- - lib/rley/syntax/verbatim_symbol.rb
194
206
  - lib/support/base_tokenizer.rb
195
207
  - spec/rley/base/dotted_item_spec.rb
196
208
  - spec/rley/base/grm_items_builder_spec.rb
@@ -211,6 +223,7 @@ files:
211
223
  - spec/rley/gfg/shortcut_edge_spec.rb
212
224
  - spec/rley/gfg/start_vertex_spec.rb
213
225
  - spec/rley/gfg/vertex_spec.rb
226
+ - spec/rley/lexical/literal_spec.rb
214
227
  - spec/rley/lexical/token_range_spec.rb
215
228
  - spec/rley/lexical/token_spec.rb
216
229
  - spec/rley/notation/grammar_builder_spec.rb
@@ -254,13 +267,11 @@ files:
254
267
  - spec/rley/syntax/base_grammar_builder_spec.rb
255
268
  - spec/rley/syntax/grammar_spec.rb
256
269
  - spec/rley/syntax/grm_symbol_spec.rb
257
- - spec/rley/syntax/literal_spec.rb
258
270
  - spec/rley/syntax/match_closest_spec.rb
259
271
  - spec/rley/syntax/non_terminal_spec.rb
260
272
  - spec/rley/syntax/production_spec.rb
261
273
  - spec/rley/syntax/symbol_seq_spec.rb
262
274
  - spec/rley/syntax/terminal_spec.rb
263
- - spec/rley/syntax/verbatim_symbol_spec.rb
264
275
  - spec/spec_helper.rb
265
276
  - spec/support/base_tokenizer_spec.rb
266
277
  homepage: https://github.com/famished-tiger/Rley
@@ -310,6 +321,7 @@ test_files:
310
321
  - spec/rley/gfg/shortcut_edge_spec.rb
311
322
  - spec/rley/gfg/start_vertex_spec.rb
312
323
  - spec/rley/gfg/vertex_spec.rb
324
+ - spec/rley/lexical/literal_spec.rb
313
325
  - spec/rley/lexical/token_range_spec.rb
314
326
  - spec/rley/lexical/token_spec.rb
315
327
  - spec/rley/notation/grammar_builder_spec.rb
@@ -342,11 +354,9 @@ test_files:
342
354
  - spec/rley/syntax/base_grammar_builder_spec.rb
343
355
  - spec/rley/syntax/grammar_spec.rb
344
356
  - spec/rley/syntax/grm_symbol_spec.rb
345
- - spec/rley/syntax/literal_spec.rb
346
357
  - spec/rley/syntax/match_closest_spec.rb
347
358
  - spec/rley/syntax/non_terminal_spec.rb
348
359
  - spec/rley/syntax/production_spec.rb
349
360
  - spec/rley/syntax/symbol_seq_spec.rb
350
361
  - spec/rley/syntax/terminal_spec.rb
351
- - spec/rley/syntax/verbatim_symbol_spec.rb
352
362
  - spec/support/base_tokenizer_spec.rb
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ostruct'
4
-
5
- module Rley # This module is used as a namespace
6
- module Parser # This module is used as a namespace
7
- # Utility class used to trace the parsing of a token sequence.
8
- class ParseTracer
9
- # The stream where the trace output is sent
10
- attr_reader(:ostream)
11
-
12
- # The trace level
13
- attr_reader(:level)
14
- attr_reader(:lexemes)
15
- attr_reader(:col_width)
16
-
17
- def initialize(aTraceLevel, anIO, aTokenSequence)
18
- @level = aTraceLevel <= 0 ? 0 : [aTraceLevel, 2].min
19
- @ostream = anIO
20
- @lexemes = aTokenSequence.map(&:lexeme)
21
-
22
- emit_tokens
23
- emit_heading
24
- end
25
-
26
- # Emit the trace text to the output IO
27
- # if the given trace level is equal or greater to the
28
- # trace level of the tracer instance.
29
- def print_if(aLevel, text)
30
- ostream.print(text) if level >= aLevel
31
- end
32
-
33
- # Emit the trace of a scanning step.
34
- def trace_scanning(aStatesetIndex, aParseState)
35
- return unless level
36
-
37
- scan_picture = "[#{'-' * (col_width - 1)}]"
38
- org = OpenStruct.new(origin: aStatesetIndex - 1,
39
- dotted_rule: aParseState.dotted_rule)
40
- trace_diagram(aStatesetIndex, org, scan_picture)
41
- end
42
-
43
- def trace_prediction(aStatesetIndex, aParseState)
44
- return unless level
45
-
46
- trace_diagram(aStatesetIndex, aParseState, '>')
47
- end
48
-
49
- def trace_completion(aStatesetIndex, aParseState)
50
- return unless level
51
-
52
- if aStatesetIndex == lexemes.size && aParseState.origin.zero? &&
53
- aParseState.complete?
54
- picture = '=' * (col_width * lexemes.size - 1)
55
- else
56
- count = col_width * (aStatesetIndex - aParseState.origin) - 1
57
- picture = '-' * count
58
- end
59
- completion_picture = "[#{picture}#{aParseState.complete? ? ']' : '>'}"
60
- trace_diagram(aStatesetIndex, aParseState, completion_picture)
61
- end
62
-
63
- private
64
-
65
- def emit_tokens
66
- literals = lexemes.map { |lx| "'#{lx}'" }
67
- print_if 1, "[#{literals.join(', ')}]\n"
68
- end
69
-
70
- def emit_heading
71
- longest = lexemes.map(&:length).max
72
- @col_width = longest + 3
73
- headers = lexemes.map { |l| l.center(col_width - 1, ' ').to_s }
74
- print_if 1, "|.#{headers.join('.')}.|\n"
75
- end
76
-
77
- # rubocop: disable Style/StringConcatenation
78
- def padding(aStatesetIndex, aParseState, aPicture)
79
- l_pad_pattern = '.' + ' ' * (col_width - 1)
80
- left_padding = l_pad_pattern * [0, aParseState.origin].max
81
- r_pad_pattern = ' ' * (col_width - 1) + '.'
82
- right_padding = r_pad_pattern * (lexemes.size - aStatesetIndex)
83
- return left_padding + aPicture + right_padding
84
- end
85
- # rubocop: enable Style/StringConcatenation
86
-
87
- def parse_state_str(aStatesetIndex, aParseState)
88
- "[#{aParseState.origin}:#{aStatesetIndex}] #{aParseState.dotted_rule}"
89
- end
90
-
91
- def trace_diagram(aStatesetIndex, aParseState, aPicture)
92
- diagram = padding(aStatesetIndex, aParseState, aPicture)
93
- prefix = '|'
94
- suffix = "| #{parse_state_str(aStatesetIndex, aParseState)}"
95
- trace = prefix + diagram + suffix
96
-
97
- print_if 1, "#{trace}\n"
98
- end
99
- end # class
100
- end # module
101
- end # module
102
-
103
- # End of file
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'terminal' # Load superclass
4
-
5
- module Rley # This module is used as a namespace
6
- module Syntax # This module is used as a namespace
7
- # A literal is terminal symbol that matches a lexical pattern
8
- class Literal < Terminal
9
- # The exact text representation of the word.
10
- attr_reader(:pattern)
11
-
12
- def initialize(aName, aPattern)
13
- super(aName)
14
- @pattern = aPattern
15
- end
16
- end # class
17
- end # module
18
- end # module
19
-
20
- # End of file
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'terminal' # Load superclass
4
-
5
- module Rley # This module is used as a namespace
6
- module Syntax # This module is used as a namespace
7
- # A verbatim word is terminal symbol that represents one unique word
8
- # in the language defined the grammar.
9
- class VerbatimSymbol < Terminal
10
- # The exact text representation of the word.
11
- attr_reader(:text)
12
-
13
- def initialize(aText)
14
- super(aText) # Do we need to separate the text from the name?
15
- @text = aText.dup
16
- end
17
-
18
- # The String representation of the verbatim symbol
19
- # @return [String]
20
- def to_s
21
- "'#{text}'"
22
- end
23
- end # class
24
- end # module
25
- end # module
26
-
27
- # End of file
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../spec_helper'
4
-
5
- # Load the class under test
6
- require_relative '../../../lib/rley/syntax/literal'
7
-
8
- module Rley # Open this namespace to avoid module qualifier prefixes
9
- module Syntax # Open this namespace to avoid module qualifier prefixes
10
- describe Literal do
11
- let(:sample_name) { 'ordinal' }
12
- subject { Literal.new(sample_name, /\d+/) }
13
-
14
- context 'Initialization:' do
15
- it 'should be created with a name and regexp' do
16
- expect { Literal.new(sample_name, /\d+/) }.not_to raise_error
17
- end
18
-
19
- it 'should know its name' do
20
- expect(subject.name).to eq(sample_name)
21
- end
22
-
23
- it 'should know its pattern' do
24
- expect(subject.pattern).to eq(/\d+/)
25
- end
26
- end # context
27
- end # describe
28
- end # module
29
- end # module
30
-
31
- # End of file
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../spec_helper'
4
-
5
- # Load the class under test
6
- require_relative '../../../lib/rley/syntax/verbatim_symbol'
7
-
8
- module Rley # Open this namespace to avoid module qualifier prefixes
9
- module Syntax # Open this namespace to avoid module qualifier prefixes
10
- describe VerbatimSymbol do
11
- let(:sample_name) { 'cheapest' }
12
- subject { VerbatimSymbol.new(sample_name) }
13
-
14
- context 'Initialization:' do
15
- it 'should be created with a word' do
16
- expect { VerbatimSymbol.new('cheapest') }.not_to raise_error
17
- end
18
-
19
- it 'should know its name' do
20
- expect(subject.name).to eq(sample_name)
21
- end
22
-
23
- it 'should know its text representation' do
24
- expect(subject.text).to eq(sample_name)
25
- end
26
- end # context
27
-
28
- context 'Provided services:' do
29
- it 'should give its text representation' do
30
- expected = "'#{sample_name}'"
31
- expect(subject.to_s).to eq(expected)
32
- end
33
- end # context
34
- end # describe
35
- end # module
36
- end # module
37
-
38
- # End of file