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.
@@ -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) # Is it OK?
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
- def parse_with_parameter(input)
346
- raise "Deprecated!! Use Regex with block"
347
- if match = Regexp.new(@regex).match(input)
348
- if block_given?
349
- yield match.to_a[1..match.to_a.length]
350
- else
351
- Result::OK.new(:value => match, :input => match.post_match)
352
- end
353
- else
354
- Result::Fail.new(:input => input)
355
- end
356
- end
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 = { }, &block)
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 = ::Yaparc::Regex.new(/\A[a-zA-Z_]+[a-zA-Z0-9_]*/)
457
+ @@identifier_regex = /\A[a-zA-Z_]+[a-zA-Z0-9_]*/
476
458
 
477
- def initialize(*keywords)
478
- if keywords == []
479
- @parser = lambda do |input|
480
- Tokenize.new(@@identifier_regex)
481
- end
482
- else
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 = keywords.map {|keyword| Yaparc::String.new(keyword)}
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
- Tokenize.new(@@identifier_regex)
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
- # def parse(input)
496
- # @parser.call(input).parse(input)
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
- end
517
+ # end
499
518
 
500
519
  class Char
501
520
  include Parsable
@@ -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>&lt;[^&gt;]*&gt;</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>"&lt;="</code></b></p>
160
+ <p><b><code>"="</code></b></p>
161
+ <p><b><code>"=&gt;"</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>