dendroid 0.2.01 → 0.2.02

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a6ce20fae6c5c7d07a9995e8adf97affcddc654edd7c72ff82b63b7fab42aff
4
- data.tar.gz: e3b5dbf5ebc3468a11349a809914fd0178603f926f74a36f8848f128916f9b5f
3
+ metadata.gz: bb58d7b275f7eb65ccfef37ee213fc53319c5634cf8dbd79020451c79769a3c3
4
+ data.tar.gz: f075b751545df13bda67d3e2df1c3861dfdaffa8fc416a7a735d0c4fc2da01bb
5
5
  SHA512:
6
- metadata.gz: 865063f7b0f5234871956ec35fb2cf9279804cef999d1d8041a9dde92776c3fae8d96b2aeb56bf3f1b8889a10348eef33f39e8321d8c47cd8a8db6c8a4d637f1
7
- data.tar.gz: 83f74f28495fe104c7ea9ed7e58031017636b0eedf090ab19175bb5d5e5281329307c7e06fb7e47c1f43705bfb1b65a42c441a84b352de527bf4470212862572
6
+ metadata.gz: 1f3598bbc4f19ff183e655a92ca86908615a10b2f142982c09eb11b01b9fd05296db1ce5b9fa14be9d5f71c8358fd60535a0eb8b0feea8fcddafae5100fe8df4
7
+ data.tar.gz: c3227a5e8cb2675d2de6d011091e3b665e0217e62401619db36e43967a9d407c06a50205031c03dacc43f72b01cd1b0ebf66132240194d61de1ae1e167594113
data/CHANGELOG.md CHANGED
@@ -2,12 +2,25 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.2.02] - 2023-12-18
6
+ Code re-styling to fix most Rubocop offenses.
7
+
8
+ ### Added
9
+ - Directory 'modeling' for PlantUML text files.
10
+
11
+ ### Changed
12
+ - File `dendroid.rb`: added `relative_require` to load key dependencies.
13
+
5
14
  ## [0.2.01] - 2023-12-17
6
15
  Code re-styling to fix most Rubocop offenses.
7
16
 
8
17
  ## [0.2.00] - 2023-12-16
9
18
  Version bump: Very crude parser implementation (generate shared parse forests in case of ambiguity).
10
19
 
20
+ ### Added
21
+ - Directory `parsing`: module implementing a parser
22
+ - Directory `formatters`: module with classes for rendering parse tree/forest
23
+
11
24
  ## [0.1.00] - 2023-11-03
12
25
  Version bump: the Earley recognizer is functional.
13
26
 
@@ -5,7 +5,6 @@ require_relative 'parse_node'
5
5
  module Dendroid
6
6
  module Parsing
7
7
  class CompositeParseNode < ParseNode
8
- attr_reader :range
9
8
  attr_reader :children
10
9
 
11
10
  def initialize(lowerBound, upperBound, child_count)
@@ -57,7 +57,6 @@ module Dendroid
57
57
  rules << rule
58
58
  nonterm2production[rule.head] = rule
59
59
  end
60
-
61
60
  # rubocop: enable Style/IfUnlessModifier
62
61
 
63
62
  # Return the start symbol for the language, that is,
@@ -271,11 +270,6 @@ module Dendroid
271
270
  end
272
271
  end
273
272
 
274
- # symbols.each do |sym|
275
- # next if sym.terminal?
276
- #
277
- # sym.nullable = false if sym.nullable.nil?
278
- # end
279
273
  symbols.each do |sym|
280
274
  next if sym.terminal? || sym.nullable?
281
275
 
data/lib/dendroid.rb CHANGED
@@ -1,5 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # File: dendroid.rb
4
+
3
5
  # Namespace for all modules, classes and constants from Dendroid library.
4
6
  module Dendroid
5
7
  end # module
8
+
9
+
10
+ # This file acts as a jumping-off point for loading dependencies expected
11
+ # for a Dendroid client.
12
+
13
+ require_relative './dendroid/grm_dsl/base_grm_builder'
14
+ require_relative './dendroid/utils/base_tokenizer'
15
+ require_relative './dendroid/recognizer/recognizer'
16
+ require_relative './dendroid/parsing/chart_walker'
17
+ require_relative './dendroid/parsing/parse_tree_visitor'
18
+ require_relative './dendroid//formatters/ascii_tree'
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.2.01
1
+ 0.2.02
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dendroid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.01
4
+ version: 0.2.02
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-17 00:00:00.000000000 Z
11
+ date: 2023-12-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: WIP. A Ruby implementation of an Earley parser
14
14
  email: famished.tiger@yahoo.com
@@ -41,7 +41,6 @@ files:
41
41
  - lib/dendroid/parsing/or_node.rb
42
42
  - lib/dendroid/parsing/parse_node.rb
43
43
  - lib/dendroid/parsing/parse_tree_visitor.rb
44
- - lib/dendroid/parsing/parser.rb
45
44
  - lib/dendroid/parsing/terminal_node.rb
46
45
  - lib/dendroid/parsing/walk_progress.rb
47
46
  - lib/dendroid/recognizer/chart.rb
@@ -1,185 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'weakref'
4
- require_relative '../grm_dsl/base_grm_builder'
5
- require_relative '../utils/base_tokenizer'
6
- require_relative '../recognizer/recognizer'
7
- require_relative 'chart_walker'
8
- require_relative 'parse_tree_visitor'
9
- require_relative '../formatters/bracket_notation'
10
- require_relative '../formatters/ascii_tree'
11
-
12
- module Dendroid
13
- module Parsing
14
- class Parser
15
- end # class
16
- end # module
17
- end # module
18
-
19
- def grammar_l1
20
- builder = Dendroid::GrmDSL::BaseGrmBuilder.new do
21
- # Grammar inspired from Wikipedia entry on Earley parsing
22
- declare_terminals('PLUS', 'STAR', 'INTEGER')
23
- rule('p' => 's')
24
- rule('s' => ['s PLUS m', 'm'])
25
- rule('m' => ['m STAR t', 't'])
26
- rule('t' => 'INTEGER')
27
- end
28
-
29
- builder.grammar
30
- end
31
-
32
- def grammar_l31
33
- builder = Dendroid::GrmDSL::BaseGrmBuilder.new do
34
- # Ambiguous arithmetical expression language
35
- # This language is compatible with tokenizer L1
36
- declare_terminals('PLUS', 'STAR', 'INTEGER')
37
- rule('p' => 's')
38
- rule('s' => ['s PLUS s', 's STAR s', 'INTEGER'])
39
- end
40
-
41
- builder.grammar
42
- end
43
-
44
- def tokenizer_l1
45
- Dendroid::Utils::BaseTokenizer.new do
46
- map_verbatim2terminal({ '+' => :PLUS, '*' => :STAR })
47
-
48
- scan_verbatim(['+', '*'])
49
- scan_value(/\d+/, :INTEGER, ->(txt) { txt.to_i })
50
- end
51
- end
52
-
53
- def retrieve_success_item(chart, grammar)
54
- last_item_set = chart.item_sets.last
55
- result = nil
56
- last_item_set.items.reverse_each do |itm|
57
- if itm.origin.zero? && itm.dotted_item.completed? && itm.dotted_item.rule.lhs == grammar.start_symbol
58
- result = itm
59
- break
60
- end
61
- end
62
-
63
- result
64
- end
65
-
66
- def grammar_l10
67
- # Grammar with left recursive rule
68
- builder = Dendroid::GrmDSL::BaseGrmBuilder.new do
69
- declare_terminals('a')
70
-
71
- rule 'A' => ['A a', '']
72
- end
73
-
74
- builder.grammar
75
- end
76
-
77
- def tokenizer_l10
78
- Dendroid::Utils::BaseTokenizer.new do
79
- map_verbatim2terminal({ 'a' => :a })
80
-
81
- scan_verbatim(['a'])
82
- end
83
- end
84
-
85
- def grammar_l11
86
- builder = Dendroid::GrmDSL::BaseGrmBuilder.new do
87
- # Grammar with right-recursive rule
88
- declare_terminals('a')
89
-
90
- rule 'A' => ['a A', '']
91
- end
92
-
93
- builder.grammar
94
- end
95
-
96
- def tokenizer_l11
97
- Dendroid::Utils::BaseTokenizer.new do
98
- map_verbatim2terminal({ 'a' => :a })
99
-
100
- scan_verbatim(['a'])
101
- end
102
- end
103
-
104
- def grammar_l8
105
- builder = Dendroid::GrmDSL::BaseGrmBuilder.new do
106
- # (based on grammar G2 from paper Masaru Tomita "An Efficient Context-Free Parsing Algorithm
107
- # for Natural Languages")
108
- declare_terminals('x')
109
-
110
- rule 'S' => ['S S', 'x']
111
- end
112
-
113
- builder.grammar
114
- end
115
-
116
- def tokenizer_l8
117
- Dendroid::Utils::BaseTokenizer.new do
118
- map_verbatim2terminal({ 'x' => :x })
119
-
120
- scan_verbatim(['x'])
121
- end
122
- end
123
-
124
- ########################################
125
- # Entry point
126
- ########################################
127
- kode = 3
128
-
129
- case kode
130
- when 0
131
- recognizer = Dendroid::Recognizer::Recognizer.new(grammar_l1, tokenizer_l1)
132
- chart = recognizer.run('2 + 3 * 4')
133
- succ_item = retrieve_success_item(chart, recognizer.grm_analysis.grammar)
134
- walker = Dendroid::Parsing::ChartWalker.new(chart)
135
- root = walker.walk(succ_item)
136
-
137
- # formatter = BracketNotation.new($stdout)
138
- formatter = Asciitree.new($stdout)
139
- visitor = ParseTreeVisitor.new(root)
140
- formatter.render(visitor)
141
-
142
- when 1
143
- recognizer = Dendroid::Recognizer::Recognizer.new(grammar_l10, tokenizer_l10)
144
- chart = recognizer.run('a a a a a')
145
- succ_item = retrieve_success_item(chart, recognizer.grm_analysis.grammar)
146
- walker = Dendroid::Parsing::ChartWalker.new(chart)
147
- root = walker.walk(succ_item)
148
-
149
- formatter = Asciitree.new($stdout)
150
- visitor = ParseTreeVisitor.new(root)
151
- formatter.render(visitor)
152
-
153
- when 2
154
- recognizer = Dendroid::Recognizer::Recognizer.new(grammar_l11, tokenizer_l11)
155
- chart = recognizer.run('a a a a a')
156
- succ_item = retrieve_success_item(chart, recognizer.grm_analysis.grammar)
157
- walker = Dendroid::Parsing::ChartWalker.new(chart)
158
- root = walker.walk(succ_item)
159
-
160
- formatter = Asciitree.new($stdout)
161
- visitor = ParseTreeVisitor.new(root)
162
- formatter.render(visitor)
163
-
164
- when 3
165
- recognizer = Dendroid::Recognizer::Recognizer.new(grammar_l31, tokenizer_l1)
166
- chart = recognizer.run('2 + 3 * 4')
167
- succ_item = retrieve_success_item(chart, recognizer.grm_analysis.grammar)
168
- walker = Dendroid::Parsing::ChartWalker.new(chart)
169
- root = walker.walk(succ_item)
170
-
171
- formatter = Asciitree.new($stdout)
172
- visitor = ParseTreeVisitor.new(root)
173
- formatter.render(visitor)
174
-
175
- when 4
176
- recognizer = Dendroid::Recognizer::Recognizer.new(grammar_l8, tokenizer_l8)
177
- chart = recognizer.run('x x x x')
178
- succ_item = retrieve_success_item(chart, recognizer.grm_analysis.grammar)
179
- walker = Dendroid::Parsing::ChartWalker.new(chart)
180
- root = walker.walk(succ_item)
181
-
182
- formatter = Asciitree.new($stdout)
183
- visitor = ParseTreeVisitor.new(root)
184
- formatter.render(visitor)
185
- end