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 +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/dendroid/parsing/composite_parse_node.rb +0 -1
- data/lib/dendroid/syntax/grammar.rb +0 -6
- data/lib/dendroid.rb +13 -0
- data/version.txt +1 -1
- metadata +2 -3
- data/lib/dendroid/parsing/parser.rb +0 -185
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb58d7b275f7eb65ccfef37ee213fc53319c5634cf8dbd79020451c79769a3c3
|
4
|
+
data.tar.gz: f075b751545df13bda67d3e2df1c3861dfdaffa8fc416a7a735d0c4fc2da01bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
|
@@ -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.
|
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.
|
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-
|
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
|