yaparc 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>