yaparc 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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/lib/yaparc.rb
CHANGED
@@ -29,10 +29,6 @@ module Yaparc
|
|
29
29
|
IS_WHITESPACE = lambda {|i| i == ' ' or i == "\n" or i == "\t"}
|
30
30
|
IS_CR = lambda {|i| i == "\n"}
|
31
31
|
|
32
|
-
# def self.included(mod)
|
33
|
-
# mod.extend ClassMethods
|
34
|
-
# end
|
35
|
-
|
36
32
|
def parse(input) #, &block)
|
37
33
|
result = @parser.call(input)
|
38
34
|
|
@@ -41,44 +37,14 @@ module Yaparc
|
|
41
37
|
else
|
42
38
|
result
|
43
39
|
end
|
44
|
-
|
45
|
-
# if result.respond_to? :parse
|
46
|
-
# result = result.parse(input)
|
47
|
-
# else
|
48
|
-
# # if block_given?
|
49
|
-
# # result.value = yield result.value
|
50
|
-
# # @tree = result
|
51
|
-
# # end
|
52
|
-
# result
|
53
|
-
# end
|
54
|
-
|
55
|
-
# if result.respond_to? :parse
|
56
|
-
# result = result.parse(input)
|
57
|
-
# else
|
58
|
-
# if block_given?
|
59
|
-
# result.value = yield result.value
|
60
|
-
# @tree = result
|
61
|
-
# else
|
62
|
-
# @tree = result.value
|
63
|
-
# end
|
64
|
-
# result
|
65
|
-
# end
|
66
40
|
end
|
67
41
|
|
68
|
-
# def eval
|
69
|
-
# tree = parse(input)
|
70
|
-
# end
|
71
|
-
|
72
|
-
|
73
|
-
# module ClassMethods
|
74
|
-
# def included(mod)
|
75
|
-
# end
|
76
|
-
# end
|
77
42
|
end # of Module Parsable
|
78
43
|
|
79
44
|
class Succeed
|
80
45
|
include Parsable
|
81
46
|
attr_reader :remaining
|
47
|
+
|
82
48
|
def initialize(value, remaining = nil)
|
83
49
|
@parser = lambda do |input|
|
84
50
|
Result::OK.new(:value => value, :input => input)
|
@@ -99,6 +65,7 @@ module Yaparc
|
|
99
65
|
|
100
66
|
class Item
|
101
67
|
include Parsable
|
68
|
+
|
102
69
|
def initialize
|
103
70
|
@parser = lambda do |input|
|
104
71
|
if input.nil? or input.empty?
|
@@ -112,6 +79,7 @@ module Yaparc
|
|
112
79
|
|
113
80
|
class ZeroOne
|
114
81
|
include Parsable
|
82
|
+
|
115
83
|
def initialize(parser, identity = [])
|
116
84
|
@parser = lambda do |input|
|
117
85
|
case result = parser.parse(input)
|
@@ -131,9 +99,9 @@ module Yaparc
|
|
131
99
|
|
132
100
|
class Satisfy
|
133
101
|
include Parsable
|
102
|
+
|
134
103
|
def initialize(predicate)
|
135
104
|
raise unless predicate.instance_of?(Proc)
|
136
|
-
|
137
105
|
@parser = lambda do |input|
|
138
106
|
result = Item.new.parse(input)
|
139
107
|
if result.instance_of?(Result::OK) and predicate.call(result.value)
|
@@ -141,27 +109,6 @@ module Yaparc
|
|
141
109
|
else
|
142
110
|
Fail.new
|
143
111
|
end
|
144
|
-
|
145
|
-
# if result.instance_of?(Result::OK)
|
146
|
-
# if predicate.call(result.value)
|
147
|
-
# Succeed.new(result.value, result.input)
|
148
|
-
# else
|
149
|
-
# Fail.new
|
150
|
-
# end
|
151
|
-
# else # Result::Fail or Result::Error
|
152
|
-
# Fail.new
|
153
|
-
# end
|
154
|
-
|
155
|
-
# case result = Item.new.parse(input)
|
156
|
-
# when Result::OK
|
157
|
-
# parser = if predicate.call(result.value)
|
158
|
-
# Succeed.new(result.value, result.input)
|
159
|
-
# else
|
160
|
-
# Fail.new
|
161
|
-
# end
|
162
|
-
# else # Result::Fail or Result::Error
|
163
|
-
# Fail.new
|
164
|
-
# end
|
165
112
|
end
|
166
113
|
end
|
167
114
|
|
@@ -190,15 +137,6 @@ module Yaparc
|
|
190
137
|
else
|
191
138
|
Succeed.new(result.value)
|
192
139
|
end
|
193
|
-
# case result = parser.parse(input)
|
194
|
-
# when Result::Fail
|
195
|
-
# Result::Error.new(:value => result.value, :input => result.input)
|
196
|
-
# when Result::OK
|
197
|
-
# Succeed.new(result.value)
|
198
|
-
# else
|
199
|
-
# Succeed.new(result.value)
|
200
|
-
# # Result::OK.new(:value => result.value,:input => result.input)
|
201
|
-
# end
|
202
140
|
end
|
203
141
|
end
|
204
142
|
end # of NoFail
|
@@ -206,6 +144,7 @@ module Yaparc
|
|
206
144
|
|
207
145
|
class Seq
|
208
146
|
include Parsable
|
147
|
+
|
209
148
|
def initialize(*parsers, &block)
|
210
149
|
@parser = lambda do |input|
|
211
150
|
args = []
|
@@ -218,13 +157,6 @@ module Yaparc
|
|
218
157
|
args << result.value
|
219
158
|
result
|
220
159
|
end
|
221
|
-
# case result = parser.parse(subsequent.input)
|
222
|
-
# when Result::Fail
|
223
|
-
# break Result::Fail.new(:input => subsequent.input)
|
224
|
-
# else
|
225
|
-
# args << result.value
|
226
|
-
# result
|
227
|
-
# end
|
228
160
|
end
|
229
161
|
|
230
162
|
case final_result
|
@@ -267,8 +199,34 @@ module Yaparc
|
|
267
199
|
end # of initialize
|
268
200
|
end
|
269
201
|
|
202
|
+
# class Alt
|
203
|
+
# include Parsable
|
204
|
+
# def initialize(*parsers)
|
205
|
+
# @parser = lambda do |input|
|
206
|
+
# if head = parsers[0]
|
207
|
+
# case result = head.parse(input)
|
208
|
+
# when Result::Fail
|
209
|
+
# if parsers.empty?
|
210
|
+
# result
|
211
|
+
# else
|
212
|
+
# Alt.new(*parsers[1..-1]).parse(input)
|
213
|
+
# end
|
214
|
+
# when Result::OK
|
215
|
+
# result
|
216
|
+
# else
|
217
|
+
# raise
|
218
|
+
# end
|
219
|
+
# else
|
220
|
+
# Result::Fail.new(:input => input)
|
221
|
+
# end
|
222
|
+
# end
|
223
|
+
# end # of initialize
|
224
|
+
# end
|
225
|
+
|
226
|
+
|
270
227
|
class Apply
|
271
228
|
include Parsable
|
229
|
+
|
272
230
|
def initialize(parser, &block)
|
273
231
|
@parser = lambda do |input|
|
274
232
|
result = parser.parse(input)
|
@@ -277,12 +235,6 @@ module Yaparc
|
|
277
235
|
else
|
278
236
|
Fail.new.parse(input)
|
279
237
|
end
|
280
|
-
# case result = parser.parse(input)
|
281
|
-
# when Result::OK
|
282
|
-
# Succeed.new(yield(result.value)).parse(result.input)
|
283
|
-
# else
|
284
|
-
# Fail.new.parse(input)
|
285
|
-
# end
|
286
238
|
end
|
287
239
|
end # of initialize
|
288
240
|
end # of Apply
|
@@ -290,6 +242,7 @@ module Yaparc
|
|
290
242
|
|
291
243
|
class String
|
292
244
|
include Parsable
|
245
|
+
|
293
246
|
def initialize(string, case_sensitive = true)
|
294
247
|
@parser = lambda do |input|
|
295
248
|
result = Item.new.parse(string)
|
@@ -298,30 +251,15 @@ module Yaparc
|
|
298
251
|
Char.new(result.value, case_sensitive),
|
299
252
|
Yaparc::String.new(result.input, case_sensitive),
|
300
253
|
Succeed.new(result.value + result.input)
|
301
|
-
) do |char_result, string_result, succeed_result|
|
254
|
+
# ) do |char_result, string_result, succeed_result|
|
255
|
+
) do |_, _, succeed_result|
|
302
256
|
succeed_result
|
303
257
|
end
|
304
258
|
else
|
305
|
-
Succeed.new(result)
|
259
|
+
Succeed.new(result)
|
306
260
|
end
|
307
|
-
# case result = Item.new.parse(string)
|
308
|
-
# when Result::OK
|
309
|
-
# Seq.new(
|
310
|
-
# Char.new(result.value, case_sensitive),
|
311
|
-
# Yaparc::String.new(result.input, case_sensitive),
|
312
|
-
# Succeed.new(result.value + result.input)
|
313
|
-
# ) do |char_result, string_result, succeed_result|
|
314
|
-
# succeed_result
|
315
|
-
# end
|
316
|
-
# else
|
317
|
-
# Succeed.new(result) # Is it OK?
|
318
|
-
# end
|
319
261
|
end
|
320
262
|
end
|
321
|
-
|
322
|
-
# def parse(input)
|
323
|
-
# @parser.call(input).parse(input)
|
324
|
-
# end
|
325
263
|
end
|
326
264
|
|
327
265
|
class Regex
|
@@ -342,23 +280,24 @@ module Yaparc
|
|
342
280
|
end
|
343
281
|
end
|
344
282
|
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
283
|
+
# def parse_with_parameter(input)
|
284
|
+
# raise "Deprecated!! Use Regex with block"
|
285
|
+
# if match = Regexp.new(@regex).match(input)
|
286
|
+
# if block_given?
|
287
|
+
# yield match.to_a[1..match.to_a.length]
|
288
|
+
# else
|
289
|
+
# Result::OK.new(:value => match, :input => match.post_match)
|
290
|
+
# end
|
291
|
+
# else
|
292
|
+
# Result::Fail.new(:input => input)
|
293
|
+
# end
|
294
|
+
# end
|
357
295
|
end
|
358
296
|
|
359
297
|
# permits zero or more applications of parser.
|
360
298
|
class Many
|
361
299
|
include Parsable
|
300
|
+
|
362
301
|
def initialize(parser, identity = [])
|
363
302
|
@parser = lambda do |input|
|
364
303
|
Alt.new(ManyOne.new(parser, identity), Succeed.new(identity))
|
@@ -369,6 +308,7 @@ module Yaparc
|
|
369
308
|
# requires at least one successfull application of parser.
|
370
309
|
class ManyOne
|
371
310
|
include Parsable
|
311
|
+
|
372
312
|
def initialize(parser, identity = [])
|
373
313
|
@parser = lambda do |input|
|
374
314
|
Seq.new(parser, Many.new(parser, identity)) do |head, tail|
|
@@ -430,6 +370,7 @@ module Yaparc
|
|
430
370
|
|
431
371
|
class WhiteSpace
|
432
372
|
include Parsable
|
373
|
+
|
433
374
|
def initialize
|
434
375
|
@parser = lambda do |input|
|
435
376
|
#Many.new(Satisfy.new(IS_WHITESPACE),'')
|
@@ -442,7 +383,7 @@ module Yaparc
|
|
442
383
|
include Parsable
|
443
384
|
attr_accessor :prefix, :postfix
|
444
385
|
|
445
|
-
def initialize(parser, args = {
|
386
|
+
def initialize(parser, args = {}, &block)
|
446
387
|
@parser = lambda do |input|
|
447
388
|
@prefix = args[:prefix] ? args[:prefix] : WhiteSpace.new
|
448
389
|
@postfix = args[:postfix] ? args[:postfix] : WhiteSpace.new
|
@@ -462,6 +403,7 @@ module Yaparc
|
|
462
403
|
|
463
404
|
class Literal
|
464
405
|
include Parsable
|
406
|
+
|
465
407
|
def initialize(literal, case_sensitive = true)
|
466
408
|
@parser = lambda do |input|
|
467
409
|
Tokenize.new(Yaparc::String.new(literal, case_sensitive))
|
@@ -469,33 +411,110 @@ module Yaparc
|
|
469
411
|
end
|
470
412
|
end
|
471
413
|
|
414
|
+
# class Tokenizer
|
415
|
+
# include Parsable
|
416
|
+
# attr_accessor :prefix, :postfix
|
417
|
+
|
418
|
+
# def initialize(args = {})
|
419
|
+
# @parser = lambda do |input|
|
420
|
+
# @prefix = args[:prefix] ? args[:prefix] : WhiteSpace.new
|
421
|
+
# @postfix = args[:postfix] ? args[:postfix] : WhiteSpace.new
|
422
|
+
# end
|
423
|
+
# end
|
424
|
+
|
425
|
+
# def tokenize(&block)
|
426
|
+
# parser = yield
|
427
|
+
|
428
|
+
# Seq.new(@prefix, parser, @postfix) do |_, vs, _|
|
429
|
+
# vs
|
430
|
+
# end
|
431
|
+
# end
|
432
|
+
# end
|
433
|
+
|
434
|
+
# class Literalizer
|
435
|
+
# include Parsable
|
436
|
+
|
437
|
+
# def initialize(literal, options = {})
|
438
|
+
# unless case_sensitive = options[:case_sensitive]
|
439
|
+
# true
|
440
|
+
# end
|
441
|
+
|
442
|
+
# unless tokenizer = options[:tokenizer]
|
443
|
+
# tokenizer = Tokenizer.new
|
444
|
+
# end
|
445
|
+
|
446
|
+
# @parser = lambda do |input|
|
447
|
+
# tokenizer.tokenize do
|
448
|
+
# Yaparc::String.new(literal, case_sensitive)
|
449
|
+
# end
|
450
|
+
# end
|
451
|
+
# end
|
452
|
+
# end
|
453
|
+
|
472
454
|
# Refer to http://www.cs.nott.ac.uk/~gmh/monparsing.pdf, p.23
|
473
455
|
class Identifier
|
474
456
|
include Yaparc::Parsable
|
475
|
-
@@identifier_regex =
|
457
|
+
@@identifier_regex = /\A[a-zA-Z_]+[a-zA-Z0-9_]*/
|
476
458
|
|
477
|
-
def initialize(
|
478
|
-
if
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
459
|
+
def initialize(options = {})
|
460
|
+
identifier_regex = if regex = options[:regex]
|
461
|
+
::Yaparc::Regex.new(regex)
|
462
|
+
else
|
463
|
+
::Yaparc::Regex.new(@@identifier_regex)
|
464
|
+
end
|
465
|
+
|
466
|
+
tokenizer = Tokenize.new(identifier_regex)
|
467
|
+
|
468
|
+
if exclude = options[:exclude]
|
483
469
|
@parser = lambda do |input|
|
484
|
-
keyword_parsers =
|
470
|
+
keyword_parsers = exclude.map {|keyword| Yaparc::String.new(keyword)}
|
471
|
+
|
485
472
|
case result = Yaparc::Alt.new(*keyword_parsers).parse(input)
|
486
473
|
when Yaparc::Result::OK
|
487
474
|
Yaparc::Fail.new
|
488
475
|
else # Result::Fail or Result::Error
|
489
|
-
|
476
|
+
tokenizer
|
490
477
|
end
|
491
478
|
end
|
479
|
+
else
|
480
|
+
@parser = lambda do |input|
|
481
|
+
tokenizer
|
482
|
+
end
|
492
483
|
end
|
493
484
|
end
|
485
|
+
end
|
494
486
|
|
495
|
-
#
|
496
|
-
#
|
487
|
+
# class Identifier
|
488
|
+
# include Yaparc::Parsable
|
489
|
+
# @@identifier_regex = ::Yaparc::Regex.new(/\A[a-zA-Z_]+[a-zA-Z0-9_]*/)
|
490
|
+
|
491
|
+
# def initialize(*keywords)
|
492
|
+
# # def initialize(*keywords, &block)
|
493
|
+
# if keywords == []
|
494
|
+
# @parser = lambda do |input|
|
495
|
+
# Tokenize.new(@@identifier_regex)
|
496
|
+
# # if block_given?
|
497
|
+
# # tokenize = Tokenize.new(@@identifier_regex)
|
498
|
+
# # yield tokenize
|
499
|
+
# # tokenize
|
500
|
+
# # else
|
501
|
+
# # Tokenize.new(@@identifier_regex)
|
502
|
+
# # end
|
503
|
+
# end
|
504
|
+
# else
|
505
|
+
# @parser = lambda do |input|
|
506
|
+
# keyword_parsers = keywords.map {|keyword| Yaparc::String.new(keyword)}
|
507
|
+
|
508
|
+
# case result = Yaparc::Alt.new(*keyword_parsers).parse(input)
|
509
|
+
# when Yaparc::Result::OK
|
510
|
+
# Yaparc::Fail.new
|
511
|
+
# else # Result::Fail or Result::Error
|
512
|
+
# Tokenize.new(@@identifier_regex)
|
513
|
+
# end
|
514
|
+
# end
|
515
|
+
# end
|
497
516
|
# end
|
498
|
-
|
517
|
+
# end
|
499
518
|
|
500
519
|
class Char
|
501
520
|
include Parsable
|
data/test/n3-report.html
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
<html><head><title>BNF</title></head><body>
|
2
|
+
<h1>BNF</h1>
|
3
|
+
<p>Productions are in normal type, linked to their definitions.<br>
|
4
|
+
<em>Regular expressions are in italics</em><br>
|
5
|
+
<b><code>Literal characters in quoted in bold</code></b><br>
|
6
|
+
<em>void</em> means an empty production.
|
7
|
+
</p>
|
8
|
+
<dl>
|
9
|
+
<dt><a name="barename">barename</a></dt><dd>
|
10
|
+
<p><em>[A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-][\-0-9A-Z_a-z·À-ÖØ-öø-ͽͿ--‿-⁀⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-]*</em></p>
|
11
|
+
</dd>
|
12
|
+
<dt><a name="barename_csl">barename_csl</a></dt><dd>
|
13
|
+
<p><a href="#barename">barename</a> <a href="#barename_csl_tail">barename_csl_tail</a></p>
|
14
|
+
<p><em>void</em></p>
|
15
|
+
</dd>
|
16
|
+
<dt><a name="barename_csl_tail">barename_csl_tail</a></dt><dd>
|
17
|
+
<p><b><code>","</code></b> <a href="#barename">barename</a> <a href="#barename_csl_tail">barename_csl_tail</a></p>
|
18
|
+
<p><em>void</em></p>
|
19
|
+
</dd>
|
20
|
+
<dt><a name="boolean">boolean</a></dt><dd>
|
21
|
+
<p><b><code>"@false"</code></b></p>
|
22
|
+
<p><b><code>"@true"</code></b></p>
|
23
|
+
</dd>
|
24
|
+
<dt><a name="decimal">decimal</a></dt><dd>
|
25
|
+
<p><em>[-+]?[0-9]+(\.[0-9]+)?</em></p>
|
26
|
+
</dd>
|
27
|
+
<dt><a name="declaration">declaration</a></dt><dd>
|
28
|
+
<p><b><code>"@base"</code></b> <a href="#explicituri">explicituri</a></p>
|
29
|
+
<p><b><code>"@keywords"</code></b> <a href="#barename_csl">barename_csl</a></p>
|
30
|
+
<p><b><code>"@prefix"</code></b> <a href="#prefix">prefix</a> <a href="#explicituri">explicituri</a></p>
|
31
|
+
</dd>
|
32
|
+
<dt><a name="document">document</a></dt><dd>
|
33
|
+
<p><a href="#statements_optional">statements_optional</a> <em>EOF</em></p>
|
34
|
+
</dd>
|
35
|
+
<dt><a name="double">double</a></dt><dd>
|
36
|
+
<p><em>[-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)</em></p>
|
37
|
+
</dd>
|
38
|
+
<dt><a name="dtlang">dtlang</a></dt><dd>
|
39
|
+
<p><b><code>"@"</code></b> <a href="#langcode">langcode</a></p>
|
40
|
+
<p><b><code>"^^"</code></b> <a href="#symbol">symbol</a></p>
|
41
|
+
<p><em>void</em></p>
|
42
|
+
</dd>
|
43
|
+
<dt><a name="existential">existential</a></dt><dd>
|
44
|
+
<p><b><code>"@forSome"</code></b> <a href="#symbol_csl">symbol_csl</a></p>
|
45
|
+
</dd>
|
46
|
+
<dt><a name="explicituri">explicituri</a></dt><dd>
|
47
|
+
<p><em><[^>]*></em></p>
|
48
|
+
</dd>
|
49
|
+
<dt><a name="expression">expression</a></dt><dd>
|
50
|
+
<p><a href="#pathitem">pathitem</a> <a href="#pathtail">pathtail</a></p>
|
51
|
+
</dd>
|
52
|
+
<dt><a name="formulacontent">formulacontent</a></dt><dd>
|
53
|
+
<p><a href="#statementlist">statementlist</a></p>
|
54
|
+
</dd>
|
55
|
+
<dt><a name="integer">integer</a></dt><dd>
|
56
|
+
<p><em>[-+]?[0-9]+</em></p>
|
57
|
+
</dd>
|
58
|
+
<dt><a name="langcode">langcode</a></dt><dd>
|
59
|
+
<p><em>[a-z]+(-[a-z0-9]+)*</em></p>
|
60
|
+
</dd>
|
61
|
+
<dt><a name="literal">literal</a></dt><dd>
|
62
|
+
<p><a href="#string">string</a> <a href="#dtlang">dtlang</a></p>
|
63
|
+
</dd>
|
64
|
+
<dt><a name="numericliteral">numericliteral</a></dt><dd>
|
65
|
+
<p><a href="#decimal">decimal</a></p>
|
66
|
+
<p><a href="#double">double</a></p>
|
67
|
+
<p><a href="#integer">integer</a></p>
|
68
|
+
</dd>
|
69
|
+
<dt><a name="object">object</a></dt><dd>
|
70
|
+
<p><a href="#expression">expression</a></p>
|
71
|
+
</dd>
|
72
|
+
<dt><a name="objecttail">objecttail</a></dt><dd>
|
73
|
+
<p><b><code>","</code></b> <a href="#object">object</a> <a href="#objecttail">objecttail</a></p>
|
74
|
+
<p><em>void</em></p>
|
75
|
+
</dd>
|
76
|
+
<dt><a name="pathitem">pathitem</a></dt><dd>
|
77
|
+
<p><a href="#boolean">boolean</a></p>
|
78
|
+
<p><a href="#literal">literal</a></p>
|
79
|
+
<p><a href="#numericliteral">numericliteral</a></p>
|
80
|
+
<p><a href="#quickvariable">quickvariable</a></p>
|
81
|
+
<p><a href="#symbol">symbol</a></p>
|
82
|
+
<p><b><code>"("</code></b> <a href="#pathlist">pathlist</a> <b><code>")"</code></b></p>
|
83
|
+
<p><b><code>"["</code></b> <a href="#propertylist">propertylist</a> <b><code>"]"</code></b></p>
|
84
|
+
<p><b><code>"{"</code></b> <a href="#formulacontent">formulacontent</a> <b><code>"}"</code></b></p>
|
85
|
+
</dd>
|
86
|
+
<dt><a name="pathlist">pathlist</a></dt><dd>
|
87
|
+
<p><a href="#expression">expression</a> <a href="#pathlist">pathlist</a></p>
|
88
|
+
<p><em>void</em></p>
|
89
|
+
</dd>
|
90
|
+
<dt><a name="pathtail">pathtail</a></dt><dd>
|
91
|
+
<p><b><code>"!"</code></b> <a href="#expression">expression</a></p>
|
92
|
+
<p><b><code>"^"</code></b> <a href="#expression">expression</a></p>
|
93
|
+
<p><em>void</em></p>
|
94
|
+
</dd>
|
95
|
+
<dt><a name="prefix">prefix</a></dt><dd>
|
96
|
+
<p><em>([A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-][\-0-9A-Z_a-z·À-ÖØ-öø-ͽͿ--‿-⁀⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-]*)?:</em></p>
|
97
|
+
</dd>
|
98
|
+
<dt><a name="propertylist">propertylist</a></dt><dd>
|
99
|
+
<p><a href="#verb">verb</a> <a href="#object">object</a> <a href="#objecttail">objecttail</a> <a href="#propertylisttail">propertylisttail</a></p>
|
100
|
+
<p><em>void</em></p>
|
101
|
+
</dd>
|
102
|
+
<dt><a name="propertylisttail">propertylisttail</a></dt><dd>
|
103
|
+
<p><b><code>";"</code></b> <a href="#propertylist">propertylist</a></p>
|
104
|
+
<p><em>void</em></p>
|
105
|
+
</dd>
|
106
|
+
<dt><a name="qname">qname</a></dt><dd>
|
107
|
+
<p><em>(([A
|
108
|
+
-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-][\-0-9A-Z_a-z·À-ÖØ-öø-ͽͿ-
|
109
|
+
-‿-⁀⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-]*)?:)?[A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-
|
110
|
+
�𐀀-][\-0-9A-Z_a-z·À-ÖØ-öø-ͽͿ--‿-⁀⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-]*</em></p>
|
111
|
+
</dd>
|
112
|
+
<dt><a name="quickvariable">quickvariable</a></dt><dd>
|
113
|
+
<p><em>\?[A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-][\-0-9A-Z_a-z·À-ÖØ-öø-ͽͿ--‿-⁀⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-]*</em></p>
|
114
|
+
</dd>
|
115
|
+
<dt><a name="simpleStatement">simpleStatement</a></dt><dd>
|
116
|
+
<p><a href="#subject">subject</a> <a href="#propertylist">propertylist</a></p>
|
117
|
+
</dd>
|
118
|
+
<dt><a name="statement">statement</a></dt><dd>
|
119
|
+
<p><a href="#declaration">declaration</a></p>
|
120
|
+
<p><a href="#existential">existential</a></p>
|
121
|
+
<p><a href="#simpleStatement">simpleStatement</a></p>
|
122
|
+
<p><a href="#universal">universal</a></p>
|
123
|
+
</dd>
|
124
|
+
<dt><a name="statementlist">statementlist</a></dt><dd>
|
125
|
+
<p><a href="#statement">statement</a> <a href="#statementtail">statementtail</a></p>
|
126
|
+
<p><em>void</em></p>
|
127
|
+
</dd>
|
128
|
+
<dt><a name="statements_optional">statements_optional</a></dt><dd>
|
129
|
+
<p><a href="#statement">statement</a> <b><code>"."</code></b> <a href="#statements_optional">statements_optional</a></p>
|
130
|
+
<p><em>void</em></p>
|
131
|
+
</dd>
|
132
|
+
<dt><a name="statementtail">statementtail</a></dt><dd>
|
133
|
+
<p><b><code>"."</code></b> <a href="#statementlist">statementlist</a></p>
|
134
|
+
<p><em>void</em></p>
|
135
|
+
</dd>
|
136
|
+
<dt><a name="string">string</a></dt><dd>
|
137
|
+
<p><em>("""[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*""")|("[^"\\]*(?:\\.[^"\\]*)*")</em></p>
|
138
|
+
</dd>
|
139
|
+
<dt><a name="subject">subject</a></dt><dd>
|
140
|
+
<p><a href="#expression">expression</a></p>
|
141
|
+
</dd>
|
142
|
+
<dt><a name="symbol">symbol</a></dt><dd>
|
143
|
+
<p><a href="#explicituri">explicituri</a></p>
|
144
|
+
<p><a href="#qname">qname</a></p>
|
145
|
+
</dd>
|
146
|
+
<dt><a name="symbol_csl">symbol_csl</a></dt><dd>
|
147
|
+
<p><a href="#symbol">symbol</a> <a href="#symbol_csl_tail">symbol_csl_tail</a></p>
|
148
|
+
<p><em>void</em></p>
|
149
|
+
</dd>
|
150
|
+
<dt><a name="symbol_csl_tail">symbol_csl_tail</a></dt><dd>
|
151
|
+
<p><b><code>","</code></b> <a href="#symbol">symbol</a> <a href="#symbol_csl_tail">symbol_csl_tail</a></p>
|
152
|
+
<p><em>void</em></p>
|
153
|
+
</dd>
|
154
|
+
<dt><a name="universal">universal</a></dt><dd>
|
155
|
+
<p><b><code>"@forAll"</code></b> <a href="#symbol_csl">symbol_csl</a></p>
|
156
|
+
</dd>
|
157
|
+
<dt><a name="verb">verb</a></dt><dd>
|
158
|
+
<p><a href="#expression">expression</a></p>
|
159
|
+
<p><b><code>"<="</code></b></p>
|
160
|
+
<p><b><code>"="</code></b></p>
|
161
|
+
<p><b><code>"=>"</code></b></p>
|
162
|
+
<p><b><code>"@a"</code></b></p>
|
163
|
+
<p><b><code>"@has"</code></b> <a href="#expression">expression</a></p>
|
164
|
+
<p><b><code>"@is"</code></b> <a href="#expression">expression</a> <b><code>"@of"</code></b></p>
|
165
|
+
</dd>
|
166
|
+
|
167
|
+
</dl>
|
168
|
+
|
169
|
+
</body></html>
|