rley 0.7.08 → 0.8.03

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +29 -5
  3. data/CHANGELOG.md +28 -4
  4. data/README.md +4 -5
  5. data/examples/NLP/nano_eng/nano_en_demo.rb +7 -11
  6. data/examples/NLP/nano_eng/nano_grammar.rb +18 -18
  7. data/examples/data_formats/JSON/json_ast_builder.rb +9 -18
  8. data/examples/data_formats/JSON/json_demo.rb +1 -2
  9. data/examples/data_formats/JSON/json_grammar.rb +11 -11
  10. data/examples/general/calc_iter1/calc_grammar.rb +5 -4
  11. data/examples/general/calc_iter2/calc_grammar.rb +9 -9
  12. data/examples/general/left.rb +1 -1
  13. data/examples/general/right.rb +1 -1
  14. data/lib/rley/base/dotted_item.rb +5 -0
  15. data/lib/rley/base/grm_items_builder.rb +6 -0
  16. data/lib/rley/constants.rb +1 -1
  17. data/lib/rley/engine.rb +2 -2
  18. data/lib/rley/interface.rb +16 -0
  19. data/lib/rley/notation/all_notation_nodes.rb +4 -0
  20. data/lib/rley/notation/ast_builder.rb +185 -0
  21. data/lib/rley/notation/ast_node.rb +44 -0
  22. data/lib/rley/notation/ast_visitor.rb +115 -0
  23. data/lib/rley/notation/grammar.rb +49 -0
  24. data/lib/rley/notation/grammar_builder.rb +505 -0
  25. data/lib/rley/notation/grouping_node.rb +23 -0
  26. data/lib/rley/notation/parser.rb +56 -0
  27. data/lib/rley/notation/sequence_node.rb +35 -0
  28. data/lib/rley/notation/symbol_node.rb +29 -0
  29. data/lib/rley/notation/tokenizer.rb +180 -0
  30. data/lib/rley/parse_rep/ast_base_builder.rb +44 -0
  31. data/lib/rley/parser/gfg_chart.rb +101 -6
  32. data/lib/rley/parser/gfg_earley_parser.rb +1 -1
  33. data/lib/rley/parser/gfg_parsing.rb +5 -3
  34. data/lib/rley/parser/parse_entry_set.rb +1 -1
  35. data/lib/rley/syntax/{grammar_builder.rb → base_grammar_builder.rb} +53 -15
  36. data/lib/rley/syntax/grm_symbol.rb +1 -1
  37. data/lib/rley/syntax/match_closest.rb +43 -0
  38. data/lib/rley/syntax/production.rb +6 -0
  39. data/lib/rley.rb +1 -1
  40. data/spec/rley/engine_spec.rb +6 -6
  41. data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -2
  42. data/spec/rley/notation/grammar_builder_spec.rb +302 -0
  43. data/spec/rley/notation/parser_spec.rb +183 -0
  44. data/spec/rley/notation/tokenizer_spec.rb +364 -0
  45. data/spec/rley/parse_rep/ast_builder_spec.rb +0 -1
  46. data/spec/rley/parse_rep/groucho_spec.rb +1 -1
  47. data/spec/rley/parse_rep/parse_forest_builder_spec.rb +1 -1
  48. data/spec/rley/parse_rep/parse_forest_factory_spec.rb +2 -2
  49. data/spec/rley/parse_rep/parse_tree_factory_spec.rb +1 -1
  50. data/spec/rley/parser/dangling_else_spec.rb +447 -0
  51. data/spec/rley/parser/gfg_earley_parser_spec.rb +118 -10
  52. data/spec/rley/parser/gfg_parsing_spec.rb +2 -1
  53. data/spec/rley/parser/parse_walker_factory_spec.rb +2 -2
  54. data/spec/rley/support/ambiguous_grammar_helper.rb +2 -2
  55. data/spec/rley/support/grammar_abc_helper.rb +2 -2
  56. data/spec/rley/support/grammar_ambig01_helper.rb +2 -2
  57. data/spec/rley/support/grammar_arr_int_helper.rb +2 -2
  58. data/spec/rley/support/grammar_b_expr_helper.rb +2 -2
  59. data/spec/rley/support/grammar_int_seq_helper.rb +51 -0
  60. data/spec/rley/support/grammar_l0_helper.rb +2 -2
  61. data/spec/rley/support/grammar_pb_helper.rb +2 -2
  62. data/spec/rley/support/grammar_sppf_helper.rb +2 -2
  63. data/spec/rley/syntax/{grammar_builder_spec.rb → base_grammar_builder_spec.rb} +29 -11
  64. data/spec/rley/syntax/match_closest_spec.rb +46 -0
  65. data/spec/rley/syntax/production_spec.rb +4 -0
  66. metadata +29 -14
  67. data/lib/rley/parser/parse_state.rb +0 -78
  68. data/lib/rley/parser/parse_state_tracker.rb +0 -59
  69. data/lib/rley/parser/state_set.rb +0 -100
  70. data/spec/rley/parser/parse_state_spec.rb +0 -125
  71. data/spec/rley/parser/parse_tracer_spec.rb +0 -200
  72. data/spec/rley/parser/state_set_spec.rb +0 -130
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7377b66e5bac6ee813506829f53a32d694e9a01eaee5f55deec4475a710305d7
4
- data.tar.gz: 7f972ad8f29be409a12cb61ae095177d8f9f2594fe9b7eb0ef1a931de0729c9c
3
+ metadata.gz: 3e3f429e3129dc66ab35ca8bba695b0788d710c6e61033a086d7b3c7c40af7cf
4
+ data.tar.gz: eea709ac4554918cc690e27ebb8540418234b6b0706fd98390c6f8f5d603f868
5
5
  SHA512:
6
- metadata.gz: d9e888ca1df16c7421df180c551879e6d066f9f848db2135be637951c7edfe928d693be8b1e22753c10b546198351650cc6dfd1acf14837597979f2e0a589715
7
- data.tar.gz: 4ea2a4c50e66321a00d828264052df58e83beb69ccc13fe9cda7dd9b648eee58f4332510867fef291006e2378f2c25ce85fff95ac11a7ed367578cee567b3b34
6
+ metadata.gz: bf936e0f984789b7c509b9bbd5078c787e79caef32120f4409b23225fe7589d1bdddf5e74e1467401acffb329461b0812c3bb46a9da4b651ae10c94fcd4a52e1
7
+ data.tar.gz: 606e0e80bfedcd9915eff6b776a826b9032cef201febc07bfcbc1a027622606584bd83e9874a5f448637dd46f66592490c92138c874a07ae630d678e17b5982f
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - 'exp/**/*'
4
- - 'demo/**/*'
3
+ - 'examples/**/*'
4
+ - 'exp/**/*'
5
5
 
6
6
  Gemspec/DateAssignment:
7
7
  Enabled: true
@@ -50,6 +50,9 @@ Layout/IndentationConsistency:
50
50
  Layout/HeredocIndentation:
51
51
  Enabled: false
52
52
 
53
+ Layout/LineEndStringConcatenationIndentation:
54
+ Enabled: true
55
+
53
56
  Layout/MultilineHashBraceLayout:
54
57
  Enabled: true
55
58
 
@@ -81,6 +84,9 @@ Layout/TrailingWhitespace:
81
84
  Lint/AmbiguousAssignment:
82
85
  Enabled: true
83
86
 
87
+ Lint/AmbiguousRange:
88
+ Enabled: true
89
+
84
90
  Lint/DeprecatedConstants:
85
91
  Enabled: true
86
92
 
@@ -96,6 +102,9 @@ Lint/EmptyBlock:
96
102
  Lint/EmptyClass:
97
103
  Enabled: false
98
104
 
105
+ Lint/EmptyInPattern:
106
+ Enabled: true
107
+
99
108
  Lint/LambdaWithoutLiteralBlock:
100
109
  Enabled: true
101
110
 
@@ -192,6 +201,9 @@ Naming/ClassAndModuleCamelCase:
192
201
  Naming/BlockParameterName:
193
202
  Enabled: true
194
203
 
204
+ Naming/InclusiveLanguage:
205
+ Enabled: true
206
+
195
207
  Naming/MethodParameterName:
196
208
  Enabled: false
197
209
 
@@ -201,9 +213,6 @@ Naming/MethodName:
201
213
  Naming/VariableName:
202
214
  Enabled: false
203
215
 
204
- Style/AccessorGrouping:
205
- Enabled: false
206
-
207
216
  Style/Alias:
208
217
  Enabled: true
209
218
 
@@ -276,11 +285,17 @@ Style/HashTransformValues:
276
285
  Style/IfUnlessModifier:
277
286
  Enabled: false
278
287
 
288
+ Style/InPatternThen:
289
+ Enabled: true
290
+
279
291
  Style/InverseMethods:
280
292
  Enabled: false
281
293
 
282
294
  Style/MissingRespondToMissing:
283
295
  Enabled: false
296
+
297
+ Style/MultilineInPatternThen:
298
+ Enabled: true
284
299
 
285
300
  Style/NegatedIfElseCondition:
286
301
  Enabled: true
@@ -293,6 +308,9 @@ Style/NilLambda:
293
308
 
294
309
  Style/NumericLiterals:
295
310
  Enabled: false
311
+
312
+ Style/QuotedSymbols:
313
+ Enabled: true
296
314
 
297
315
  Style/RaiseArgs:
298
316
  Enabled: true
@@ -305,6 +323,9 @@ Style/RedundantReturn:
305
323
 
306
324
  Style/RedundantSelf:
307
325
  Enabled: true
326
+
327
+ Style/RedundantSelfAssignmentBranch:
328
+ Enabled: true
308
329
 
309
330
  Style/RegexpLiteral:
310
331
  Enabled: false
@@ -367,6 +388,9 @@ Lint/TopLevelReturnWithArgument:
367
388
  Lint/UnreachableLoop:
368
389
  Enabled: true
369
390
 
391
+ Style/AccessorGrouping:
392
+ Enabled: true
393
+
370
394
  Style/ArrayCoercion:
371
395
  Enabled: true
372
396
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,27 @@
1
+ ### 0.8.03 / 2021-08-27
2
+ - Added missing method in `ASTBaseBuilder` class
3
+
4
+ * [FIX] Added method `ParseRep::ASTBaseBuilder#reduce_children`.
5
+
6
+ ### 0.8.02 / 2021-08-23
7
+ - Code restyling to please Rubocop 1.19.1
8
+
9
+ * [CHANGE] File `.rubocp.yml` updated to take into account new cops.
10
+ * [CHANGE] File `*.rb` files updated to fix Rubocop findings
11
+
12
+
13
+ ### 0.8.01 / 2021-08-22
14
+ - Unused/redundant file removal. Fix in rule generation
15
+
16
+ * [CHANGE] Removal of files in repository that were redundant/useless.
17
+ * [FIX] The rule ordering was broken by the rules implicitly generated by Rlry
18
+
19
+ ### 0.8.00 / 2021-08-15
20
+ - New grammar builder that accepts ? * + modifiers
21
+
22
+ ### 0.7.08 / 2021-05-30
23
+ - Code restyling to please rubocop 1.15.0
24
+
1
25
  ### 0.7.07 / 2020-11-16
2
26
  - Code restyling to please rubocop 0.93.1
3
27
  * [CHANGE] File `.travis.yml`: updated Ruby versions, drop support for Ruby 2.3.x
@@ -9,10 +33,10 @@
9
33
  - [FIX] Method `GFGParsing#nullable_rule`: issue with nullable productions having at least one member in their rhs.
10
34
 
11
35
  ### 0.7.04 / 2019-08-17
12
- - Rley recognizer is about 25% faster than previous version. Kudos to the people
13
- behind the *magic_frozen_string_literal* gem.
36
+ - Rley recognizer is about 25% faster than previous version. Kudos to the people
37
+ behind the *magic_frozen_string_literal* gem.
14
38
  - Code refactoring to use string frozen magic comments (as a consequence, Rley runs only on Rubies 2.3 or newer).
15
- - Code restyling to please rubocop 0.7.40.
39
+ - Code restyling to please rubocop 0.7.40.
16
40
  - [CHANGE] Class `ParseEntrySet`: minor code optimization
17
41
  - [CHANGE] File `README.md` removed allusion to Ruby 2.0.x up to 2.2.x.
18
42
  - [CHANGE] File `README.md` added Ruby 2.6.x up as supported version.
@@ -97,7 +121,7 @@ behind the *magic_frozen_string_literal* gem.
97
121
  * [FIX] Code re-styling to remove most style offenses found by Rubocop 0.52.1
98
122
 
99
123
  ### 0.6.00 / 2018-02-25
100
- Version bump. Highlights: new programming interface through facade object, improved AST generation.
124
+ Version bump. Highlights: new programming interface through facade object, improved AST generation.
101
125
  * [NEW] Class `Rley::Engine`: Implementation of Facade design pattern to reach more convenient interface.
102
126
  * [NEW] Class `Rley::ParseRep::ASTBaseBuilder` Abstract class that simplifies the creation of custom AST (Abstract Syntax Tree)
103
127
  * [NEW] Module `Rley::ParseRep` hosts the classes for building parse representations (parse trees and forests)
data/README.md CHANGED
@@ -50,11 +50,10 @@ application range such as:
50
50
 
51
51
 
52
52
  ### Compatibility
53
- Rley supports the following Ruby implementations:
54
- - MRI 2.3
55
- - MRI 2.4
53
+ Rley supports the following Ruby implementations:
56
54
  - MRI 2.5
57
55
  - MRI 2.6
56
+ - MRI 2.7
58
57
  - JRuby 9.1+
59
58
 
60
59
  ---
@@ -106,9 +105,9 @@ The subset of English grammar is based on an example from the NLTK book.
106
105
  # Here we define the productions (= grammar rules)
107
106
  rule 'S' => 'NP VP'
108
107
  rule 'NP' => 'Proper-Noun'
109
- rule 'NP' => 'Determiner Noun'
108
+ rule 'NP' => 'Determiner Noun'
110
109
  rule 'NP' => 'Determiner Noun PP'
111
- rule 'VP' => 'Verb NP'
110
+ rule 'VP' => 'Verb NP'
112
111
  rule 'VP' => 'Verb NP PP'
113
112
  rule 'PP' => 'Preposition NP'
114
113
  end
@@ -24,20 +24,16 @@ engine.build_grammar do
24
24
 
25
25
  # Here we define the productions (= grammar rules)
26
26
  rule 'Start' => 'S'
27
- rule 'S' => %w[NP VP]
28
- rule 'S' => %w[Aux NP VP]
27
+ rule 'S' => 'Aux? NP VP'
29
28
  rule 'S' => 'VP'
30
29
  rule 'NP' => 'Pronoun'
31
30
  rule 'NP' => 'Proper-Noun'
32
- rule 'NP' => %w[Determiner Nominal]
33
- rule 'Nominal' => %w[Noun]
34
- rule 'Nominal' => %w[Nominal Noun]
35
- rule 'VP' => 'Verb'
36
- rule 'VP' => %w[Verb NP]
37
- rule 'VP' => %w[Verb NP PP]
38
- rule 'VP' => %w[Verb PP]
39
- rule 'VP' => %w[VP PP]
40
- rule 'PP' => %w[Preposition NP]
31
+ rule 'NP' => 'Determiner Nominal'
32
+ rule 'Nominal' => 'Nominal? Noun'
33
+ rule 'VP' => 'Verb PP?'
34
+ rule 'VP' => 'Verb NP PP?'
35
+ rule 'VP' => 'VP PP'
36
+ rule 'PP' => 'Preposition NP'
41
37
  end
42
38
 
43
39
  ########################################
@@ -12,7 +12,7 @@ require 'rley' # Load the gem
12
12
  # Daniel Jurafsky,‎ James H. Martin: "Speech and Language Processing";
13
13
  # 2009, Pearson Education, Inc., ISBN 978-0135041963
14
14
  # It defines the syntax of a sentence in a mini English-like language
15
- builder = Rley::Syntax::GrammarBuilder.new do
15
+ builder = Rley::grammar_builder do
16
16
  add_terminals('Pronoun', 'Proper-Noun')
17
17
  add_terminals('Determiner', 'Noun')
18
18
  add_terminals('Cardinal_number', 'Ordinal_number', 'Quant')
@@ -25,19 +25,19 @@ builder = Rley::Syntax::GrammarBuilder.new do
25
25
  rule 'sentence' => 'yes_no_question'
26
26
  rule 'sentence' => 'wh_subject_question'
27
27
  rule 'sentence' => 'wh_non_subject_question'
28
- rule 'declarative' => %w[NP VP]
28
+ rule 'declarative' => 'NP VP'
29
29
  rule 'imperative' => 'VP'
30
- rule 'yes_no_question' => %w[Aux NP VP]
31
- rule 'wh_subject_question' => %w[Wh_NP NP VP]
32
- rule 'wh_non_subject_question' => %w[Wh_NP Aux NP VP]
33
- rule 'NP' => %w[Predeterminer NP]
30
+ rule 'yes_no_question' => 'Aux NP VP'
31
+ rule 'wh_subject_question' => 'Wh_NP NP VP'
32
+ rule 'wh_non_subject_question' => 'Wh_NP Aux NP VP'
33
+ rule 'NP' => 'Predeterminer NP'
34
34
  rule 'NP' => 'Pronoun'
35
35
  rule 'NP' => 'Proper-Noun'
36
- rule 'NP' => %w[Det Card Ord Quant Nominal]
36
+ rule 'NP' => 'Det Card Ord Quant Nominal'
37
37
  rule 'VP' => 'Verb'
38
- rule 'VP' => %w[Verb NP]
39
- rule 'VP' => %w[Verb NP PP]
40
- rule 'VP' => %w[Verb PP]
38
+ rule 'VP' => 'Verb NP'
39
+ rule 'VP' => 'Verb NP PP'
40
+ rule 'VP' => 'Verb PP'
41
41
  rule 'Det' => 'Determiner'
42
42
  rule 'Det' => []
43
43
  rule 'Card' => 'Cardinal_number'
@@ -45,15 +45,15 @@ builder = Rley::Syntax::GrammarBuilder.new do
45
45
  rule 'Ord' => 'Ordinal_number'
46
46
  rule 'Ord' => []
47
47
  rule 'Nominal' => 'Noun'
48
- rule 'Nominal' => %w[Nominal Noun]
49
- rule 'Nominal' => %w[Nominal GerundVP]
50
- rule 'Nominal' => %w[Nominal RelClause]
51
- rule 'PP' => %w[Preposition NP]
48
+ rule 'Nominal' => 'Nominal Noun'
49
+ rule 'Nominal' => 'Nominal GerundVP'
50
+ rule 'Nominal' => 'Nominal RelClause'
51
+ rule 'PP' => 'Preposition NP'
52
52
  rule 'GerundVP' => 'GerundV'
53
- rule 'GerundVP' => %w[GerundV NP]
54
- rule 'GerundVP' => %w[GerundV NP PP]
55
- rule 'GerundVP' => %w[GerundV PP]
56
- rule 'RelClause' => %w[Relative_pronoun VP]
53
+ rule 'GerundVP' => 'GerundV NP'
54
+ rule 'GerundVP' => 'GerundV NP PP'
55
+ rule 'GerundVP' => 'GerundV PP'
56
+ rule 'RelClause' => 'Relative_pronoun VP'
57
57
  end
58
58
 
59
59
  # And now build the grammar...
@@ -32,24 +32,20 @@ class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
32
32
 
33
33
  # rubocop: disable Naming/VariableNumber
34
34
 
35
+ # rule 'JSON_text' => 'value'
35
36
  def reduce_JSON_text_0(_aProd, aRange, theTokens, theChildren)
36
37
  return_first_child(aRange, theTokens, theChildren)
37
38
  end
38
39
 
39
- # rule 'object' => %w[begin-object member-list end-object]
40
+ # rule 'object' => 'begin-object member-list? end-object'
40
41
  def reduce_object_0(aProduction, _range, _tokens, theChildren)
41
42
  second_child = theChildren[1]
42
43
  second_child.symbol = aProduction.lhs
43
44
  return second_child
44
45
  end
45
46
 
46
- # rule 'object' => %w[begin-object end-object]
47
- def reduce_object_1(aProduction, _range, _tokens, _children)
48
- return JSONObjectNode.new(aProduction.lhs)
49
- end
50
-
51
- # rule 'member-list' => %w[member-list value-separator member]
52
- def reduce_member_list_0(_range, _tokens, theChildren)
47
+ # rule 'member-list' => 'member-list value-separator member'
48
+ def reduce_member_list_0(_production, _range, _tokens, theChildren)
53
49
  node = theChildren[0]
54
50
  node.members << theChildren.last
55
51
  return node
@@ -62,31 +58,26 @@ class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
62
58
  return node
63
59
  end
64
60
 
65
- # rule 'member' => %w[string name-separator value]
61
+ # rule 'member' => 'string name-separator value'
66
62
  def reduce_member_0(aProduction, _range, _tokens, theChildren)
67
63
  return JSONPair.new(theChildren[0], theChildren[2], aProduction.lhs)
68
64
  end
69
65
 
70
- # rule 'array' => %w[begin-array array-items end-array]
66
+ # rule 'array' => 'begin-array array-items? end-array'
71
67
  def reduce_array_0(aProduction, _range, _tokens, theChildren)
72
68
  second_child = theChildren[1]
73
69
  second_child.symbol = aProduction.lhs
74
70
  return second_child
75
71
  end
76
72
 
77
- # rule 'array' => %w[begin-array end-array]
78
- def reduce_array_1(_range, _tokens, _children)
79
- return JSONArrayNode.new
80
- end
81
-
82
- # rule 'array-items' => %w[array-items value-separator value]
83
- def reduce_array_items_0(_range, _tokens, theChildren)
73
+ # rule 'array-items' => 'array-items value-separator value'
74
+ def reduce_array_items_0(_production, _range, _tokens, theChildren)
84
75
  node = theChildren[0]
85
76
  node.children << theChildren[2]
86
77
  return node
87
78
  end
88
79
 
89
- # rule 'array-items' => %w[value]
80
+ # rule 'array-items' => 'value'
90
81
  def reduce_array_items_1(aProduction, _range, _tokens, theChildren)
91
82
  node = JSONArrayNode.new(aProduction.lhs)
92
83
  node.children << theChildren[0]
@@ -37,9 +37,8 @@ case cli_options[:format]
37
37
  raise StandardError, msg if tree_rep == :cst
38
38
  end
39
39
 
40
-
41
40
  # Create a Rley facade object
42
- # If necessary, select AST representation
41
+ # If requested, select AST representation
43
42
  engine = Rley::Engine.new do |cfg|
44
43
  builder = tree_rep == :ast ? JSONASTBuilder : nil
45
44
  cfg.repr_builder = builder
@@ -9,30 +9,30 @@ require 'rley' # Load the gem
9
9
  # Original JSON grammar is available at: http://www.json.org/fatfree.html
10
10
  # Official JSON grammar: http://rfc7159.net/rfc7159#rfc.section.2
11
11
  # Names of grammar elements are based on the RFC 7159 documentation
12
- builder = Rley::Syntax::GrammarBuilder.new do
12
+ builder = Rley::grammar_builder do
13
13
  add_terminals('false', 'null', 'true') # Literal names
14
14
  add_terminals('string', 'number')
15
15
  add_terminals('begin-object', 'end-object') # For '{', '}' delimiters
16
16
  add_terminals('begin-array', 'end-array') # For '[', ']' delimiters
17
17
  add_terminals('name-separator', 'value-separator') # For ':', ',' separators
18
+
18
19
  rule 'JSON_text' => 'value'
19
20
  rule 'value' => 'false'
20
21
  rule 'value' => 'null'
21
22
  rule 'value' => 'true'
22
- rule 'value' => 'object'
23
23
  rule 'value' => 'array'
24
+ rule 'value' => 'object'
24
25
  rule 'value' => 'number'
25
26
  rule 'value' => 'string'
26
- rule 'object' => %w[begin-object member-list end-object]
27
- rule 'object' => %w[begin-object end-object]
27
+ rule 'object' => 'begin-object member_list? end-object'
28
+
28
29
  # Next rule is an example of a left recursive rule
29
- rule 'member-list' => %w[member-list value-separator member]
30
- rule 'member-list' => 'member'
31
- rule 'member' => %w[string name-separator value]
32
- rule 'array' => %w[begin-array array-items end-array]
33
- rule 'array' => %w[begin-array end-array]
34
- rule 'array-items' => %w[array-items value-separator value]
35
- rule 'array-items' => %w[value]
30
+ rule 'member_list' => 'member_list value-separator member'
31
+ rule 'member_list' => 'member'
32
+ rule 'member' => 'string name-separator value'
33
+ rule 'array' => 'begin-array array_items? end-array'
34
+ rule 'array_items' => 'array_items value-separator value'
35
+ rule 'array_items' => 'value'
36
36
  end
37
37
 
38
38
  # And now build the JSON grammar...
@@ -5,18 +5,19 @@ require 'rley' # Load the gem
5
5
 
6
6
  ########################################
7
7
  # Define a grammar for basic arithmetical expressions
8
- builder = Rley::Syntax::GrammarBuilder.new do
8
+ builder = Rley::grammar_builder do
9
9
  add_terminals('NUMBER')
10
10
  add_terminals('LPAREN', 'RPAREN') # For '(', ')' delimiters
11
11
  add_terminals('PLUS', 'MINUS') # For '+', '-' operators
12
12
  add_terminals('STAR', 'DIVIDE') # For '*', '/' operators
13
+
13
14
  rule 'expression' => 'simple_expression'
14
15
  rule 'simple_expression' => 'term'
15
- rule 'simple_expression' => %w[simple_expression add_operator term]
16
+ rule 'simple_expression' => 'simple_expression add_operator term'
16
17
  rule 'term' => 'factor'
17
- rule 'term' => %w[term mul_operator factor]
18
+ rule 'term' => 'term mul_operator factor'
18
19
  rule 'factor' => 'NUMBER'
19
- rule 'factor' => %w[LPAREN expression RPAREN]
20
+ rule 'factor' => 'LPAREN expression RPAREN'
20
21
  rule 'add_operator' => 'PLUS'
21
22
  rule 'add_operator' => 'MINUS'
22
23
  rule 'mul_operator' => 'STAR'
@@ -5,7 +5,7 @@ require 'rley' # Load the gem
5
5
 
6
6
  ########################################
7
7
  # Define a grammar for basic arithmetical expressions
8
- builder = Rley::Syntax::GrammarBuilder.new do
8
+ builder = Rley::grammar_builder do
9
9
  add_terminals('NUMBER')
10
10
  add_terminals('PLUS', 'MINUS') # For '+', '-' operators or sign
11
11
  add_terminals('STAR', 'DIVIDE', 'POWER') # For '*', '/', '**' operators
@@ -13,16 +13,16 @@ builder = Rley::Syntax::GrammarBuilder.new do
13
13
  add_terminals('PI', 'E') # For numeric constants
14
14
  add_terminals('RESERVED') # Reserved identifiers
15
15
 
16
- rule 'expression' => %w[simple_expression]
16
+ rule 'expression' => 'simple_expression'
17
17
  rule 'simple_expression' => 'term'
18
- rule 'simple_expression' => %w[simple_expression add_operator term]
18
+ rule 'simple_expression' => 'simple_expression add_operator term'
19
19
  rule 'term' => 'factor'
20
- rule 'term' => %w[term mul_operator factor]
20
+ rule 'term' => 'term mul_operator factor'
21
21
  rule 'factor' => 'simple_factor'
22
- rule 'factor' => %w[factor POWER simple_factor]
23
- rule 'simple_factor' => %w[sign scalar]
24
- rule 'simple_factor' => %w[unary_function in_parenthesis]
25
- rule 'simple_factor' => %w[MINUS in_parenthesis]
22
+ rule 'factor' => 'factor POWER simple_factor'
23
+ rule 'simple_factor' => 'sign scalar'
24
+ rule 'simple_factor' => 'unary_function in_parenthesis'
25
+ rule 'simple_factor' => 'MINUS in_parenthesis'
26
26
  rule 'simple_factor' => 'in_parenthesis'
27
27
  rule 'sign' => 'PLUS'
28
28
  rule 'sign' => 'MINUS'
@@ -31,7 +31,7 @@ builder = Rley::Syntax::GrammarBuilder.new do
31
31
  rule 'scalar' => 'PI'
32
32
  rule 'scalar' => 'E'
33
33
  rule 'unary_function' => 'RESERVED'
34
- rule 'in_parenthesis' => %w[LPAREN expression RPAREN]
34
+ rule 'in_parenthesis' => 'LPAREN expression RPAREN'
35
35
  rule 'add_operator' => 'PLUS'
36
36
  rule 'add_operator' => 'MINUS'
37
37
  rule 'mul_operator' => 'STAR'