yaparc 0.2.2 → 0.2.3
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.
- data/lib/yaparc.rb +141 -122
- data/test/n3-report.html +169 -0
- data/test/n3.bnf +129 -0
- data/{tests/test_abc.rb → test/test_abc.rb.bak} +0 -0
- data/{tests → test}/test_calc.rb +3 -3
- data/test/test_lambda.rb +87 -0
- data/test/test_metric.rb +617 -0
- data/{tests → test}/test_owl.rb +0 -0
- data/{tests → test}/test_parser.rb +42 -22
- data/test/test_prolog.rb +287 -0
- data/{tests → test}/test_sql.rb +11 -10
- data/{tests → test}/test_uri.rb +0 -0
- metadata +24 -18
- data/tests/abc20bnf.txt +0 -264
data/{tests → test}/test_owl.rb
RENAMED
File without changes
|
@@ -36,8 +36,8 @@ class YaparcTest < Test::Unit::TestCase
|
|
36
36
|
assert_equal 1, result.value
|
37
37
|
assert_equal "abs", result.input
|
38
38
|
# assert_equal 1, parser.tree
|
39
|
-
result = parser.parse("abs") do |
|
40
|
-
|
39
|
+
result = parser.parse("abs") do |answer|
|
40
|
+
answer
|
41
41
|
end
|
42
42
|
assert_equal 1, result.value
|
43
43
|
end
|
@@ -389,26 +389,6 @@ class YaparcTest < Test::Unit::TestCase
|
|
389
389
|
assert_equal "\n abc", result.input
|
390
390
|
end
|
391
391
|
|
392
|
-
def test_identifier
|
393
|
-
parser = Identifier.new
|
394
|
-
result = parser.parse(" abc ")
|
395
|
-
assert_equal "abc", result.value
|
396
|
-
assert_equal "", result.input
|
397
|
-
result = parser.parse(" _abc ")
|
398
|
-
assert_instance_of Result::OK, result
|
399
|
-
result = parser.parse(" 0_abc ")
|
400
|
-
assert_instance_of Result::Fail, result
|
401
|
-
result = parser.parse(" _00abc ")
|
402
|
-
assert_instance_of Result::OK, result
|
403
|
-
|
404
|
-
parser_with_keyword = Identifier.new("abc","efg")
|
405
|
-
result = parser_with_keyword.parse("abc")
|
406
|
-
assert_instance_of Result::Fail, result
|
407
|
-
result = parser_with_keyword.parse(" xyz")
|
408
|
-
assert_equal "xyz", result.value
|
409
|
-
assert_equal "", result.input
|
410
|
-
|
411
|
-
end
|
412
392
|
|
413
393
|
def test_natural
|
414
394
|
parser = Natural.new
|
@@ -438,3 +418,43 @@ class YaparcTest < Test::Unit::TestCase
|
|
438
418
|
end
|
439
419
|
end
|
440
420
|
|
421
|
+
|
422
|
+
class IdentifierParserTest < Test::Unit::TestCase
|
423
|
+
include ::Yaparc
|
424
|
+
|
425
|
+
def setup
|
426
|
+
@parser = ::Yaparc::Identifier.new
|
427
|
+
# @untokenized_parser = ::Yaparc::Identifier.new do |tokenize|
|
428
|
+
# tokenize.prefix = Space.new
|
429
|
+
# tokenize.postfix = Space.new
|
430
|
+
# end
|
431
|
+
end
|
432
|
+
|
433
|
+
def test_parse
|
434
|
+
result = @parser.parse("abc")
|
435
|
+
assert_equal "abc", result.value
|
436
|
+
assert_equal "", result.input
|
437
|
+
result = @parser.parse(" abc ")
|
438
|
+
assert_equal "abc", result.value
|
439
|
+
assert_equal "", result.input
|
440
|
+
result = @parser.parse(" _abc ")
|
441
|
+
assert_instance_of Result::OK, result
|
442
|
+
result = @parser.parse(" 0_abc ")
|
443
|
+
assert_instance_of Result::Fail, result
|
444
|
+
result = @parser.parse(" _00abc ")
|
445
|
+
assert_instance_of Result::OK, result
|
446
|
+
# result = @untokenized_parser.parse(" \n abc ")
|
447
|
+
# assert_instance_of Result::OK, result
|
448
|
+
# assert_equal "abc", result.value
|
449
|
+
# assert_equal "", result.input
|
450
|
+
end
|
451
|
+
|
452
|
+
def test_parse_with_keyword
|
453
|
+
parser_with_keyword = Identifier.new(:exclude => ["abc","efg"])
|
454
|
+
result = parser_with_keyword.parse("abc")
|
455
|
+
assert_instance_of Result::Fail, result
|
456
|
+
result = parser_with_keyword.parse(" xyz")
|
457
|
+
assert_equal "xyz", result.value
|
458
|
+
assert_equal "", result.input
|
459
|
+
end
|
460
|
+
end
|
data/test/test_prolog.rb
ADDED
@@ -0,0 +1,287 @@
|
|
1
|
+
require 'lib/yaparc.rb'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
=begin
|
5
|
+
|
6
|
+
<prog> ::= <clause> [ <clause> ]*
|
7
|
+
<clause> ::= <fact> | <rule> | <query>
|
8
|
+
|
9
|
+
<fact> ::= <compoundterm> .
|
10
|
+
<compoundterm> ::= <atom> [ ( <arglist> ) ]*
|
11
|
+
|
12
|
+
<rule> ::= <head> :- <body> .
|
13
|
+
<query> ::= ?- <body> .
|
14
|
+
<head> ::= <compoundterm>
|
15
|
+
<body> ::= <goal> [, <goal>]*
|
16
|
+
<goal> ::= <compoundterm> | !
|
17
|
+
|
18
|
+
<arglist> := <arg>[, <arg>]*
|
19
|
+
<arg> ::= <atom> | <var> | <list>
|
20
|
+
|
21
|
+
<atom> ::= /[a-zA-Z][a-zA-Z0-9]*/
|
22
|
+
| '/[a-zA-Z0-9]+/'
|
23
|
+
|
24
|
+
<var> ::= ?/[a-zA-Z0-9]+/
|
25
|
+
|
26
|
+
<list> ::= <leftbracket> <rightbracket>
|
27
|
+
<list> ::= <leftbracket> <listelems> <rightbracket>
|
28
|
+
<listelems> ::= <arglist>
|
29
|
+
<listelems> ::= <arglist> <barsymbol> <list>
|
30
|
+
<listelems> ::= <arglist> <barsymbol> <var>
|
31
|
+
|
32
|
+
=end
|
33
|
+
|
34
|
+
module PrologParser
|
35
|
+
# KEYWORDS = %w{}
|
36
|
+
# <prog> ::= <clause> [ <clause> ]*
|
37
|
+
class Program
|
38
|
+
include Yaparc::Parsable
|
39
|
+
|
40
|
+
def initialize
|
41
|
+
@parser = lambda do |input|
|
42
|
+
Yaparc::Seq.new(Yaparc::ManyOne.new(Clause.new,[])) do |clauses|
|
43
|
+
#LogRuby::Program.new(*clauses)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# <clause> ::= <fact> | <rule> | <query>
|
50
|
+
class Clause
|
51
|
+
include Yaparc::Parsable
|
52
|
+
def initialize
|
53
|
+
|
54
|
+
@parser = lambda do |input|
|
55
|
+
Yaparc::Alt.new(
|
56
|
+
PrologParser::Fact.new,
|
57
|
+
PrologParser::Rule.new,
|
58
|
+
PrologParser::Query.new
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# <fact> ::= <compoundterm> .
|
65
|
+
class Fact
|
66
|
+
include Yaparc::Parsable
|
67
|
+
def initialize
|
68
|
+
@parser = lambda do |input|
|
69
|
+
Yaparc::Seq.new(
|
70
|
+
PrologParser::CompoundTerm.new,
|
71
|
+
Yaparc::Literal.new('.')) do |compoundterm,_|
|
72
|
+
#LogRuby::Fact.new(compoundterm)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# <compoundterm> ::= <atom> [ ( <arglist> ) ]*
|
79
|
+
class CompoundTerm
|
80
|
+
include Yaparc::Parsable
|
81
|
+
def initialize
|
82
|
+
@parser = lambda do |input|
|
83
|
+
Yaparc::Seq.new(
|
84
|
+
PrologParser::Atom.new,
|
85
|
+
Yaparc::ManyOne.new(
|
86
|
+
Yaparc::Seq.new(
|
87
|
+
Yaparc::Literal.new('('),
|
88
|
+
PrologParser::ArgList.new,
|
89
|
+
Yaparc::Literal.new(')')) do |_,arglist,_|
|
90
|
+
arglist
|
91
|
+
end) do ||
|
92
|
+
end) do |head, tail|
|
93
|
+
#LogRuby::CompoundTerm.new(head,*tail)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
# <rule> ::= <head> :- <body> .
|
101
|
+
class Rule
|
102
|
+
include Yaparc::Parsable
|
103
|
+
def initialize
|
104
|
+
@parser = lambda do |input|
|
105
|
+
Yaparc::Seq.new(
|
106
|
+
PrologParser::Head.new,
|
107
|
+
Yaparc::Literal.new(':-'),
|
108
|
+
PrologParser::Body.new,
|
109
|
+
Yaparc::Literal.new('.')) do |head,_,body,_|
|
110
|
+
#LogRuby::Rule.new(head,*body)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# <query> ::= ?- <body> .
|
117
|
+
class Query
|
118
|
+
include Yaparc::Parsable
|
119
|
+
def initialize
|
120
|
+
@parser = lambda do |input|
|
121
|
+
Yaparc::Seq.new(
|
122
|
+
Yaparc::Literal.new('?-'),
|
123
|
+
PrologParser::Body.new,
|
124
|
+
Yaparc::Literal.new('.')) do |_,body,_|
|
125
|
+
# LogRuby::Query.new(*body)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# <head> ::= <compoundterm>
|
132
|
+
class Head
|
133
|
+
include Yaparc::Parsable
|
134
|
+
def initialize
|
135
|
+
@parser = lambda do |input|
|
136
|
+
PrologParser::CompoundTerm.new
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# <body> ::= <goal> [, <goal>]*
|
142
|
+
class Body
|
143
|
+
include Yaparc::Parsable
|
144
|
+
def initialize
|
145
|
+
@parser = lambda do |input|
|
146
|
+
Yaparc::ManyOne.new(PrologParser::Goal.new,[])
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# <goal> ::= <compoundterm> | !
|
152
|
+
class Goal
|
153
|
+
include Yaparc::Parsable
|
154
|
+
def initialize
|
155
|
+
@parser = lambda do |input|
|
156
|
+
Yaparc::Alt.new(
|
157
|
+
PrologParser::CompoundTerm.new,
|
158
|
+
Yaparc::Literal.new('!'))
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# <arglist> := <arg>[, <arg>]*
|
164
|
+
class ArgList
|
165
|
+
include Yaparc::Parsable
|
166
|
+
def initialize
|
167
|
+
@parser = lambda do |input|
|
168
|
+
Yaparc::Seq.new(
|
169
|
+
PrologParser::Arg.new,
|
170
|
+
Yaparc::Many.new(
|
171
|
+
Yaparc::Seq.new(Yaparc::Literal.new(','), PrologParser::Arg.new),[])) do |head,tail|
|
172
|
+
[head] + tail
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
# <arg> ::= <atom> | <var> | <list>
|
179
|
+
class Arg
|
180
|
+
include Yaparc::Parsable
|
181
|
+
def initialize
|
182
|
+
@parser = lambda do |input|
|
183
|
+
Yaparc::Alt.new(
|
184
|
+
PrologParser::Variable.new,
|
185
|
+
PrologParser::Atom.new,
|
186
|
+
PrologParser::List.new)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
# <atom> ::= /[a-zA-Z][a-zA-Z0-9]*/
|
192
|
+
# | '/[a-zA-Z0-9]+/'
|
193
|
+
class Atom
|
194
|
+
include Yaparc::Parsable
|
195
|
+
def initialize
|
196
|
+
@parser = lambda do |input|
|
197
|
+
Yaparc::Seq.new(Yaparc::Regex.new(/[a-zA-Z][a-zA-Z0-9]*/)) do |ide|
|
198
|
+
#LogRuby::Atom.new(ide)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# <var> ::= ?/[a-zA-Z0-9]+/
|
205
|
+
class Variable
|
206
|
+
include Yaparc::Parsable
|
207
|
+
def initialize
|
208
|
+
@parser = lambda do |input|
|
209
|
+
Yaparc::Seq.new(
|
210
|
+
Yaparc::Literal.new("?"),
|
211
|
+
Yaparc::Regex.new(/[a-zA-Z0-9]+/)) do |_,var|
|
212
|
+
# LogRuby::Variable.new(var)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
# <list> ::= <leftbracket> <rightbracket>
|
219
|
+
class List
|
220
|
+
include Yaparc::Parsable
|
221
|
+
def initialize
|
222
|
+
@parser = lambda do |input|
|
223
|
+
Yaparc::Seq.new(
|
224
|
+
Yaparc::Literal.new("["),
|
225
|
+
Yaparc::Literal.new("]"))
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end # of PrologParser
|
230
|
+
|
231
|
+
|
232
|
+
class PrologTest < Test::Unit::TestCase
|
233
|
+
include ::Yaparc
|
234
|
+
|
235
|
+
|
236
|
+
def test_variable
|
237
|
+
var = PrologParser::Variable.new
|
238
|
+
result = var.parse("?Var")
|
239
|
+
assert_instance_of Result::OK, result
|
240
|
+
# assert_equal LogRuby::Variable.new("Var"), result.value
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_atom
|
244
|
+
atom = PrologParser::Atom.new
|
245
|
+
result = atom.parse("atom")
|
246
|
+
assert_instance_of Result::OK, result
|
247
|
+
# assert_equal LogRuby::Atom.new("atom"), result.value
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_arglist
|
251
|
+
arglist = PrologParser::ArgList.new
|
252
|
+
result = arglist.parse("term1,term2,term3")
|
253
|
+
assert_instance_of Result::OK, result
|
254
|
+
# assert_equal LogRuby::Atom.new("atom"), result.value
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_compoundterm
|
258
|
+
compoundterm = PrologParser::CompoundTerm.new
|
259
|
+
result = compoundterm.parse("functor(term1,term2,term3)")
|
260
|
+
assert_instance_of Result::OK, result
|
261
|
+
# assert_equal LogRuby::CompoundTerm.new(LogRuby::Atom.new("functor"),
|
262
|
+
# LogRuby::Atom.new("term1"),LogRuby::Atom.new("term2"),LogRuby::Atom.new("term3")), result.value
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_query
|
266
|
+
query = PrologParser::Query.new
|
267
|
+
result = query.parse("?- functor(?var,term).")
|
268
|
+
assert_instance_of Result::OK, result
|
269
|
+
# assert_equal LogRuby::Query.new(LogRuby::CompoundTerm.new(LogRuby::Atom.new('functor'),LogRuby::Variable.new('var'), LogRuby::Atom.new('term'))), result.value
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_fact
|
273
|
+
fact = PrologParser::Fact.new
|
274
|
+
result = fact.parse("functor(term).")
|
275
|
+
assert_instance_of Result::OK, result
|
276
|
+
# assert_equal LogRuby::Fact.new(LogRuby::CompoundTerm.new(LogRuby::Atom.new('functor'),LogRuby::Atom.new('term'))), result.value
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_rule
|
280
|
+
# likes(X, P) :- based(P,Y), likes(X,Y).
|
281
|
+
rule_parser = PrologParser::Rule.new
|
282
|
+
result = rule_parser.parse("likes(?X, ?P) :- based(?P,?Y), likes(?X,?Y).")
|
283
|
+
assert_instance_of Result::OK, result
|
284
|
+
# assert_equal rule, result.value
|
285
|
+
end
|
286
|
+
|
287
|
+
end
|
data/{tests → test}/test_sql.rb
RENAMED
@@ -30,7 +30,7 @@ module SQL
|
|
30
30
|
include Yaparc::Parsable
|
31
31
|
|
32
32
|
def initialize
|
33
|
-
@parser = lambda do
|
33
|
+
@parser = lambda do |input|
|
34
34
|
Yaparc::Seq.new(SelectExpression.new,
|
35
35
|
FromExpression.new,
|
36
36
|
WhereExpression.new) do |select, from, where|
|
@@ -45,7 +45,7 @@ module SQL
|
|
45
45
|
include Yaparc::Parsable
|
46
46
|
|
47
47
|
def initialize
|
48
|
-
@parser = lambda do
|
48
|
+
@parser = lambda do |input|
|
49
49
|
Yaparc::Seq.new(
|
50
50
|
Yaparc::Symbol.new('select'),
|
51
51
|
TermSequence.new) do |_,terms|
|
@@ -60,7 +60,7 @@ module SQL
|
|
60
60
|
include Yaparc::Parsable
|
61
61
|
|
62
62
|
def initialize
|
63
|
-
@parser = lambda do
|
63
|
+
@parser = lambda do |input|
|
64
64
|
Yaparc::Seq.new(
|
65
65
|
Term.new,
|
66
66
|
Yaparc::Many.new(
|
@@ -81,7 +81,7 @@ module SQL
|
|
81
81
|
include Yaparc::Parsable
|
82
82
|
|
83
83
|
def initialize
|
84
|
-
@parser = lambda do
|
84
|
+
@parser = lambda do |input|
|
85
85
|
Yaparc::Seq.new(
|
86
86
|
Yaparc::Symbol.new('from'),
|
87
87
|
PathExpression.new,
|
@@ -104,7 +104,7 @@ module SQL
|
|
104
104
|
include Yaparc::Parsable
|
105
105
|
|
106
106
|
def initialize
|
107
|
-
@parser = lambda do
|
107
|
+
@parser = lambda do |input|
|
108
108
|
Yaparc::Seq.new(
|
109
109
|
Yaparc::Symbol.new('/'),
|
110
110
|
Term.new,
|
@@ -125,7 +125,7 @@ module SQL
|
|
125
125
|
include Yaparc::Parsable
|
126
126
|
|
127
127
|
def initialize
|
128
|
-
@parser = lambda do
|
128
|
+
@parser = lambda do |input|
|
129
129
|
Yaparc::Many.new(SearchCond.new)
|
130
130
|
end
|
131
131
|
end
|
@@ -136,8 +136,9 @@ module SQL
|
|
136
136
|
include Yaparc::Parsable
|
137
137
|
|
138
138
|
def initialize#(*keywords)
|
139
|
-
@parser = lambda do
|
140
|
-
Yaparc::Identifier.new(*KEYWORDS)
|
139
|
+
@parser = lambda do |input|
|
140
|
+
# Yaparc::Identifier.new(*KEYWORDS)
|
141
|
+
Yaparc::Identifier.new(:exclude => KEYWORDS)
|
141
142
|
end
|
142
143
|
end
|
143
144
|
end
|
@@ -155,7 +156,7 @@ module SQL
|
|
155
156
|
include Yaparc::Parsable
|
156
157
|
|
157
158
|
def initialize
|
158
|
-
@parser = lambda do
|
159
|
+
@parser = lambda do |input|
|
159
160
|
Yaparc::Alt.new(
|
160
161
|
Yaparc::Seq.new(Term.new,
|
161
162
|
Op.new,
|
@@ -233,7 +234,7 @@ module SQL
|
|
233
234
|
include Yaparc::Parsable
|
234
235
|
|
235
236
|
def initialize
|
236
|
-
@parser = lambda do
|
237
|
+
@parser = lambda do |input|
|
237
238
|
Yaparc::Alt.new(
|
238
239
|
Yaparc::Apply.new(Yaparc::Symbol.new('<>')) {|_| :not},
|
239
240
|
Yaparc::Apply.new(Yaparc::Symbol.new('<=')) {|_| :lesser_eq },
|