rley 0.5.14 → 0.6.00
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/CHANGELOG.md +12 -2
- data/README.md +29 -31
- data/examples/NLP/benchmark_pico_en.rb +34 -34
- data/examples/NLP/engtagger.rb +1 -1
- data/examples/NLP/nano_eng/nano_en_demo.rb +23 -28
- data/examples/NLP/nano_eng/nano_grammar.rb +1 -1
- data/examples/NLP/pico_en_demo.rb +28 -31
- data/examples/data_formats/JSON/json_ast_builder.rb +11 -70
- data/examples/data_formats/JSON/json_demo.rb +32 -14
- data/examples/data_formats/JSON/json_grammar.rb +1 -1
- data/examples/data_formats/JSON/json_lexer.rb +5 -11
- data/examples/general/SRL/lib/ast_builder.rb +5 -28
- data/examples/general/SRL/lib/tokenizer.rb +2 -5
- data/examples/general/SRL/spec/integration_spec.rb +12 -5
- data/examples/general/SRL/spec/tokenizer_spec.rb +13 -14
- data/examples/general/SRL/srl_demo.rb +16 -9
- data/examples/general/calc_iter1/calc_ast_builder.rb +29 -85
- data/examples/general/calc_iter1/calc_demo.rb +15 -6
- data/examples/general/calc_iter1/calc_lexer.rb +2 -5
- data/examples/general/calc_iter1/spec/calculator_spec.rb +18 -19
- data/examples/general/calc_iter2/calc_ast_builder.rb +9 -107
- data/examples/general/calc_iter2/calc_demo.rb +15 -8
- data/examples/general/calc_iter2/calc_lexer.rb +3 -5
- data/examples/general/calc_iter2/spec/calculator_spec.rb +18 -31
- data/lib/rley.rb +2 -1
- data/lib/rley/constants.rb +1 -1
- data/lib/rley/engine.rb +122 -0
- data/lib/rley/parse_rep/ast_base_builder.rb +128 -0
- data/lib/rley/{parser → parse_rep}/cst_builder.rb +1 -1
- data/lib/rley/{parser → parse_rep}/parse_forest_builder.rb +1 -1
- data/lib/rley/{parser → parse_rep}/parse_forest_factory.rb +2 -2
- data/lib/rley/{parser → parse_rep}/parse_rep_creator.rb +3 -3
- data/lib/rley/{parser → parse_rep}/parse_tree_builder.rb +4 -4
- data/lib/rley/{parser → parse_rep}/parse_tree_factory.rb +1 -1
- data/lib/rley/parser/gfg_parsing.rb +16 -4
- data/spec/rley/engine_spec.rb +127 -0
- data/spec/rley/formatter/asciitree_spec.rb +11 -13
- data/spec/rley/formatter/bracket_notation_spec.rb +11 -13
- data/spec/rley/formatter/debug_spec.rb +13 -15
- data/spec/rley/formatter/json_spec.rb +10 -14
- data/spec/rley/{parser → parse_rep}/ambiguous_parse_spec.rb +3 -3
- data/spec/rley/{parser → parse_rep}/ast_builder_spec.rb +34 -83
- data/spec/rley/{parser → parse_rep}/cst_builder_spec.rb +3 -3
- data/spec/rley/{parser → parse_rep}/groucho_spec.rb +3 -3
- data/spec/rley/{parser → parse_rep}/parse_forest_builder_spec.rb +4 -4
- data/spec/rley/{parser → parse_rep}/parse_forest_factory_spec.rb +2 -2
- data/spec/rley/{parser → parse_rep}/parse_tree_factory_spec.rb +2 -2
- data/spec/rley/parse_tree_visitor_spec.rb +12 -15
- data/spec/rley/support/ast_builder.rb +403 -0
- data/spec/rley/support/grammar_arr_int_helper.rb +2 -2
- metadata +27 -28
- data/examples/data_formats/JSON/json_parser.rb +0 -46
- data/examples/general/SRL/lib/ast_building.rb +0 -20
- data/examples/general/SRL/lib/parser.rb +0 -26
- data/examples/general/calc_iter1/calc_parser.rb +0 -24
- data/examples/general/calc_iter2/ast_building.rb +0 -20
- data/examples/general/calc_iter2/calc_parser.rb +0 -24
@@ -14,9 +14,9 @@ module GrammarArrIntHelper
|
|
14
14
|
add_terminals('[', ']', ',', 'integer')
|
15
15
|
rule 'P' => 'arr'
|
16
16
|
rule 'arr' => %w([ sequence ])
|
17
|
-
rule 'sequence' =>
|
17
|
+
rule 'sequence' => 'list'
|
18
18
|
rule 'sequence' => []
|
19
|
-
rule 'list' => %w[list , integer] #
|
19
|
+
rule 'list' => %w[list , integer] # Left-recursive rule
|
20
20
|
rule 'list' => 'integer'
|
21
21
|
end
|
22
22
|
builder
|
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.
|
4
|
+
version: 0.6.00
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitri Geshef
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -142,11 +142,8 @@ files:
|
|
142
142
|
- examples/data_formats/JSON/json_grammar.rb
|
143
143
|
- examples/data_formats/JSON/json_lexer.rb
|
144
144
|
- examples/data_formats/JSON/json_minifier.rb
|
145
|
-
- examples/data_formats/JSON/json_parser.rb
|
146
145
|
- examples/general/SRL/lib/ast_builder.rb
|
147
|
-
- examples/general/SRL/lib/ast_building.rb
|
148
146
|
- examples/general/SRL/lib/grammar.rb
|
149
|
-
- examples/general/SRL/lib/parser.rb
|
150
147
|
- examples/general/SRL/lib/regex/abstract_method.rb
|
151
148
|
- examples/general/SRL/lib/regex/alternation.rb
|
152
149
|
- examples/general/SRL/lib/regex/anchor.rb
|
@@ -181,15 +178,12 @@ files:
|
|
181
178
|
- examples/general/calc_iter1/calc_demo.rb
|
182
179
|
- examples/general/calc_iter1/calc_grammar.rb
|
183
180
|
- examples/general/calc_iter1/calc_lexer.rb
|
184
|
-
- examples/general/calc_iter1/calc_parser.rb
|
185
181
|
- examples/general/calc_iter1/spec/calculator_spec.rb
|
186
|
-
- examples/general/calc_iter2/ast_building.rb
|
187
182
|
- examples/general/calc_iter2/calc_ast_builder.rb
|
188
183
|
- examples/general/calc_iter2/calc_ast_nodes.rb
|
189
184
|
- examples/general/calc_iter2/calc_demo.rb
|
190
185
|
- examples/general/calc_iter2/calc_grammar.rb
|
191
186
|
- examples/general/calc_iter2/calc_lexer.rb
|
192
|
-
- examples/general/calc_iter2/calc_parser.rb
|
193
187
|
- examples/general/calc_iter2/spec/calculator_spec.rb
|
194
188
|
- examples/general/left.rb
|
195
189
|
- examples/general/right.rb
|
@@ -198,6 +192,7 @@ files:
|
|
198
192
|
- lib/rley/base/dotted_item.rb
|
199
193
|
- lib/rley/base/grm_items_builder.rb
|
200
194
|
- lib/rley/constants.rb
|
195
|
+
- lib/rley/engine.rb
|
201
196
|
- lib/rley/formatter/asciitree.rb
|
202
197
|
- lib/rley/formatter/base_formatter.rb
|
203
198
|
- lib/rley/formatter/bracket_notation.rb
|
@@ -218,8 +213,14 @@ files:
|
|
218
213
|
- lib/rley/lexical/token.rb
|
219
214
|
- lib/rley/lexical/token_range.rb
|
220
215
|
- lib/rley/parse_forest_visitor.rb
|
216
|
+
- lib/rley/parse_rep/ast_base_builder.rb
|
217
|
+
- lib/rley/parse_rep/cst_builder.rb
|
218
|
+
- lib/rley/parse_rep/parse_forest_builder.rb
|
219
|
+
- lib/rley/parse_rep/parse_forest_factory.rb
|
220
|
+
- lib/rley/parse_rep/parse_rep_creator.rb
|
221
|
+
- lib/rley/parse_rep/parse_tree_builder.rb
|
222
|
+
- lib/rley/parse_rep/parse_tree_factory.rb
|
221
223
|
- lib/rley/parse_tree_visitor.rb
|
222
|
-
- lib/rley/parser/cst_builder.rb
|
223
224
|
- lib/rley/parser/error_reason.rb
|
224
225
|
- lib/rley/parser/gfg_chart.rb
|
225
226
|
- lib/rley/parser/gfg_earley_parser.rb
|
@@ -227,14 +228,9 @@ files:
|
|
227
228
|
- lib/rley/parser/parse_entry.rb
|
228
229
|
- lib/rley/parser/parse_entry_set.rb
|
229
230
|
- lib/rley/parser/parse_entry_tracker.rb
|
230
|
-
- lib/rley/parser/parse_forest_builder.rb
|
231
|
-
- lib/rley/parser/parse_forest_factory.rb
|
232
|
-
- lib/rley/parser/parse_rep_creator.rb
|
233
231
|
- lib/rley/parser/parse_state.rb
|
234
232
|
- lib/rley/parser/parse_state_tracker.rb
|
235
233
|
- lib/rley/parser/parse_tracer.rb
|
236
|
-
- lib/rley/parser/parse_tree_builder.rb
|
237
|
-
- lib/rley/parser/parse_tree_factory.rb
|
238
234
|
- lib/rley/parser/parse_walker_factory.rb
|
239
235
|
- lib/rley/parser/state_set.rb
|
240
236
|
- lib/rley/ptree/non_terminal_node.rb
|
@@ -261,6 +257,7 @@ files:
|
|
261
257
|
- lib/rley/syntax/verbatim_symbol.rb
|
262
258
|
- spec/rley/base/dotted_item_spec.rb
|
263
259
|
- spec/rley/base/grm_items_builder_spec.rb
|
260
|
+
- spec/rley/engine_spec.rb
|
264
261
|
- spec/rley/formatter/asciitree_spec.rb
|
265
262
|
- spec/rley/formatter/bracket_notation_spec.rb
|
266
263
|
- spec/rley/formatter/debug_spec.rb
|
@@ -280,22 +277,22 @@ files:
|
|
280
277
|
- spec/rley/lexical/token_range_spec.rb
|
281
278
|
- spec/rley/lexical/token_spec.rb
|
282
279
|
- spec/rley/parse_forest_visitor_spec.rb
|
280
|
+
- spec/rley/parse_rep/ambiguous_parse_spec.rb
|
281
|
+
- spec/rley/parse_rep/ast_builder_spec.rb
|
282
|
+
- spec/rley/parse_rep/cst_builder_spec.rb
|
283
|
+
- spec/rley/parse_rep/groucho_spec.rb
|
284
|
+
- spec/rley/parse_rep/parse_forest_builder_spec.rb
|
285
|
+
- spec/rley/parse_rep/parse_forest_factory_spec.rb
|
286
|
+
- spec/rley/parse_rep/parse_tree_factory_spec.rb
|
283
287
|
- spec/rley/parse_tree_visitor_spec.rb
|
284
|
-
- spec/rley/parser/ambiguous_parse_spec.rb
|
285
|
-
- spec/rley/parser/ast_builder_spec.rb
|
286
|
-
- spec/rley/parser/cst_builder_spec.rb
|
287
288
|
- spec/rley/parser/error_reason_spec.rb
|
288
289
|
- spec/rley/parser/gfg_chart_spec.rb
|
289
290
|
- spec/rley/parser/gfg_earley_parser_spec.rb
|
290
291
|
- spec/rley/parser/gfg_parsing_spec.rb
|
291
|
-
- spec/rley/parser/groucho_spec.rb
|
292
292
|
- spec/rley/parser/parse_entry_set_spec.rb
|
293
293
|
- spec/rley/parser/parse_entry_spec.rb
|
294
|
-
- spec/rley/parser/parse_forest_builder_spec.rb
|
295
|
-
- spec/rley/parser/parse_forest_factory_spec.rb
|
296
294
|
- spec/rley/parser/parse_state_spec.rb
|
297
295
|
- spec/rley/parser/parse_tracer_spec.rb
|
298
|
-
- spec/rley/parser/parse_tree_factory_spec.rb
|
299
296
|
- spec/rley/parser/parse_walker_factory_spec.rb
|
300
297
|
- spec/rley/parser/state_set_spec.rb
|
301
298
|
- spec/rley/ptree/non_terminal_node_spec.rb
|
@@ -306,6 +303,7 @@ files:
|
|
306
303
|
- spec/rley/sppf/non_terminal_node_spec.rb
|
307
304
|
- spec/rley/sppf/token_node_spec.rb
|
308
305
|
- spec/rley/support/ambiguous_grammar_helper.rb
|
306
|
+
- spec/rley/support/ast_builder.rb
|
309
307
|
- spec/rley/support/expectation_helper.rb
|
310
308
|
- spec/rley/support/grammar_abc_helper.rb
|
311
309
|
- spec/rley/support/grammar_ambig01_helper.rb
|
@@ -356,6 +354,7 @@ summary: Ruby implementation of the Earley's parsing algorithm
|
|
356
354
|
test_files:
|
357
355
|
- spec/rley/base/dotted_item_spec.rb
|
358
356
|
- spec/rley/base/grm_items_builder_spec.rb
|
357
|
+
- spec/rley/engine_spec.rb
|
359
358
|
- spec/rley/formatter/asciitree_spec.rb
|
360
359
|
- spec/rley/formatter/bracket_notation_spec.rb
|
361
360
|
- spec/rley/formatter/debug_spec.rb
|
@@ -374,24 +373,24 @@ test_files:
|
|
374
373
|
- spec/rley/gfg/vertex_spec.rb
|
375
374
|
- spec/rley/lexical/token_range_spec.rb
|
376
375
|
- spec/rley/lexical/token_spec.rb
|
377
|
-
- spec/rley/parser/ambiguous_parse_spec.rb
|
378
|
-
- spec/rley/parser/ast_builder_spec.rb
|
379
|
-
- spec/rley/parser/cst_builder_spec.rb
|
380
376
|
- spec/rley/parser/error_reason_spec.rb
|
381
377
|
- spec/rley/parser/gfg_chart_spec.rb
|
382
378
|
- spec/rley/parser/gfg_earley_parser_spec.rb
|
383
379
|
- spec/rley/parser/gfg_parsing_spec.rb
|
384
|
-
- spec/rley/parser/groucho_spec.rb
|
385
380
|
- spec/rley/parser/parse_entry_set_spec.rb
|
386
381
|
- spec/rley/parser/parse_entry_spec.rb
|
387
|
-
- spec/rley/parser/parse_forest_builder_spec.rb
|
388
|
-
- spec/rley/parser/parse_forest_factory_spec.rb
|
389
382
|
- spec/rley/parser/parse_state_spec.rb
|
390
383
|
- spec/rley/parser/parse_tracer_spec.rb
|
391
|
-
- spec/rley/parser/parse_tree_factory_spec.rb
|
392
384
|
- spec/rley/parser/parse_walker_factory_spec.rb
|
393
385
|
- spec/rley/parser/state_set_spec.rb
|
394
386
|
- spec/rley/parse_forest_visitor_spec.rb
|
387
|
+
- spec/rley/parse_rep/ambiguous_parse_spec.rb
|
388
|
+
- spec/rley/parse_rep/ast_builder_spec.rb
|
389
|
+
- spec/rley/parse_rep/cst_builder_spec.rb
|
390
|
+
- spec/rley/parse_rep/groucho_spec.rb
|
391
|
+
- spec/rley/parse_rep/parse_forest_builder_spec.rb
|
392
|
+
- spec/rley/parse_rep/parse_forest_factory_spec.rb
|
393
|
+
- spec/rley/parse_rep/parse_tree_factory_spec.rb
|
395
394
|
- spec/rley/parse_tree_visitor_spec.rb
|
396
395
|
- spec/rley/ptree/non_terminal_node_spec.rb
|
397
396
|
- spec/rley/ptree/parse_tree_node_spec.rb
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# Purpose: to demonstrate how to build and render a parse tree for JSON
|
2
|
-
# language
|
3
|
-
require 'rley' # Load the Rley gem
|
4
|
-
require_relative 'json_lexer'
|
5
|
-
|
6
|
-
# Steps to render a parse tree (of a valid parsed input):
|
7
|
-
# 1. Define a grammar
|
8
|
-
# 2. Create a parser for that grammar
|
9
|
-
# 3. Tokenize the input
|
10
|
-
# 4. Let the parser process the input
|
11
|
-
# 5. Generate a parse tree from the parse result
|
12
|
-
# 6. Render the parse tree (in JSON)
|
13
|
-
|
14
|
-
########################################
|
15
|
-
# Step 1. Load a grammar for JSON
|
16
|
-
require_relative 'json_grammar'
|
17
|
-
|
18
|
-
# A JSON parser derived from our general Earley parser.
|
19
|
-
class JSONParser < Rley::Parser::GFGEarleyParser
|
20
|
-
attr_reader(:source_file)
|
21
|
-
|
22
|
-
# Constructor
|
23
|
-
def initialize()
|
24
|
-
# Builder the Earley parser with the JSON grammar
|
25
|
-
super(GrammarJSON)
|
26
|
-
end
|
27
|
-
|
28
|
-
def parse_file(aFilename)
|
29
|
-
tokens = tokenize_file(aFilename)
|
30
|
-
result = parse(tokens)
|
31
|
-
|
32
|
-
return result
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def tokenize_file(aFilename)
|
38
|
-
input_source = nil
|
39
|
-
File.open(aFilename, 'r') { |f| input_source = f.read }
|
40
|
-
|
41
|
-
lexer = JSONLexer.new(input_source, GrammarJSON)
|
42
|
-
return lexer.tokens
|
43
|
-
end
|
44
|
-
end # class
|
45
|
-
|
46
|
-
# End of file
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# Mix-in module that provides convenenience methods for
|
2
|
-
# constructing an AST (Abstract Syntax Tree).
|
3
|
-
module ASTBuilding
|
4
|
-
def return_first_child(_range, _tokens, theChildren)
|
5
|
-
return theChildren[0]
|
6
|
-
end
|
7
|
-
|
8
|
-
def return_second_child(_range, _tokens, theChildren)
|
9
|
-
return theChildren[1]
|
10
|
-
end
|
11
|
-
|
12
|
-
def return_last_child(_range, _tokens, theChildren)
|
13
|
-
return theChildren[-1]
|
14
|
-
end
|
15
|
-
|
16
|
-
def return_epsilon(_range, _tokens, _children)
|
17
|
-
return nil
|
18
|
-
end
|
19
|
-
end # module
|
20
|
-
# End of file
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# Purpose: to demonstrate how to build and render a parse tree for JSON
|
2
|
-
# language
|
3
|
-
require_relative 'tokenizer'
|
4
|
-
require_relative 'grammar'
|
5
|
-
module SRL
|
6
|
-
# A parser for a subset of Simple Regex Language
|
7
|
-
class Parser < Rley::Parser::GFGEarleyParser
|
8
|
-
attr_reader(:source_file)
|
9
|
-
|
10
|
-
# Constructor
|
11
|
-
def initialize()
|
12
|
-
# Builder the Earley parser with the calculator grammar
|
13
|
-
super(Grammar)
|
14
|
-
end
|
15
|
-
|
16
|
-
def parse_SRL(aText)
|
17
|
-
lexer = Tokenizer.new(aText, grammar)
|
18
|
-
tokens = lexer.tokens
|
19
|
-
result = parse(tokens)
|
20
|
-
|
21
|
-
return result
|
22
|
-
end
|
23
|
-
end # class
|
24
|
-
end # module
|
25
|
-
|
26
|
-
# End of file
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# Purpose: to demonstrate how to build and render a parse tree for JSON
|
2
|
-
# language
|
3
|
-
require_relative 'calc_lexer'
|
4
|
-
require_relative 'calc_grammar'
|
5
|
-
|
6
|
-
# A parser for arithmetic expressions
|
7
|
-
class CalcParser < Rley::Parser::GFGEarleyParser
|
8
|
-
attr_reader(:source_file)
|
9
|
-
|
10
|
-
# Constructor
|
11
|
-
def initialize()
|
12
|
-
# Builder the Earley parser with the calculator grammar
|
13
|
-
super(CalcGrammar)
|
14
|
-
end
|
15
|
-
|
16
|
-
def parse_expression(aText)
|
17
|
-
lexer = CalcLexer.new(aText, grammar)
|
18
|
-
result = parse(lexer.tokens)
|
19
|
-
|
20
|
-
return result
|
21
|
-
end
|
22
|
-
end # class
|
23
|
-
|
24
|
-
# End of file
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# Mix-in module that provides convenenience methods for
|
2
|
-
# constructing an AST (Abstract Syntax Tree).
|
3
|
-
module ASTBuilding
|
4
|
-
def return_first_child(_range, _tokens, theChildren)
|
5
|
-
return theChildren[0]
|
6
|
-
end
|
7
|
-
|
8
|
-
def return_second_child(_range, _tokens, theChildren)
|
9
|
-
return theChildren[1]
|
10
|
-
end
|
11
|
-
|
12
|
-
def return_last_child(_range, _tokens, theChildren)
|
13
|
-
return theChildren[-1]
|
14
|
-
end
|
15
|
-
|
16
|
-
def return_epsilon(_range, _tokens, _children)
|
17
|
-
return nil
|
18
|
-
end
|
19
|
-
end # module
|
20
|
-
# End of file
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# Purpose: to demonstrate how to build and render a parse tree for JSON
|
2
|
-
# language
|
3
|
-
require_relative 'calc_lexer'
|
4
|
-
require_relative 'calc_grammar'
|
5
|
-
|
6
|
-
# A parser for arithmetic expressions
|
7
|
-
class CalcParser < Rley::Parser::GFGEarleyParser
|
8
|
-
attr_reader(:source_file)
|
9
|
-
|
10
|
-
# Constructor
|
11
|
-
def initialize()
|
12
|
-
# Builder the Earley parser with the calculator grammar
|
13
|
-
super(CalcGrammar)
|
14
|
-
end
|
15
|
-
|
16
|
-
def parse_expression(aText)
|
17
|
-
lexer = CalcLexer.new(aText, grammar)
|
18
|
-
result = parse(lexer.tokens)
|
19
|
-
|
20
|
-
return result
|
21
|
-
end
|
22
|
-
end # class
|
23
|
-
|
24
|
-
# End of file
|