stark 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4019 @@
1
+ class Stark::Parser
2
+ # :stopdoc:
3
+
4
+ # This is distinct from setup_parser so that a standalone parser
5
+ # can redefine #initialize and still have access to the proper
6
+ # parser setup code.
7
+ def initialize(str, debug=false)
8
+ setup_parser(str, debug)
9
+ end
10
+
11
+
12
+
13
+ # Prepares for parsing +str+. If you define a custom initialize you must
14
+ # call this method before #parse
15
+ def setup_parser(str, debug=false)
16
+ @string = str
17
+ @pos = 0
18
+ @memoizations = Hash.new { |h,k| h[k] = {} }
19
+ @result = nil
20
+ @failed_rule = nil
21
+ @failing_rule_offset = -1
22
+
23
+ setup_foreign_grammar
24
+ end
25
+
26
+ attr_reader :string
27
+ attr_reader :failing_rule_offset
28
+ attr_accessor :result, :pos
29
+
30
+
31
+ def current_column(target=pos)
32
+ if c = string.rindex("\n", target-1)
33
+ return target - c - 1
34
+ end
35
+
36
+ target + 1
37
+ end
38
+
39
+ def current_line(target=pos)
40
+ cur_offset = 0
41
+ cur_line = 0
42
+
43
+ string.each_line do |line|
44
+ cur_line += 1
45
+ cur_offset += line.size
46
+ return cur_line if cur_offset >= target
47
+ end
48
+
49
+ -1
50
+ end
51
+
52
+ def lines
53
+ lines = []
54
+ string.each_line { |l| lines << l }
55
+ lines
56
+ end
57
+
58
+
59
+
60
+ def get_text(start)
61
+ @string[start..@pos-1]
62
+ end
63
+
64
+ def show_pos
65
+ width = 10
66
+ if @pos < width
67
+ "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
68
+ else
69
+ "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
70
+ end
71
+ end
72
+
73
+ def failure_info
74
+ l = current_line @failing_rule_offset
75
+ c = current_column @failing_rule_offset
76
+
77
+ if @failed_rule.kind_of? Symbol
78
+ info = self.class::Rules[@failed_rule]
79
+ "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
80
+ else
81
+ "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
82
+ end
83
+ end
84
+
85
+ def failure_caret
86
+ l = current_line @failing_rule_offset
87
+ c = current_column @failing_rule_offset
88
+
89
+ line = lines[l-1]
90
+ "#{line}\n#{' ' * (c - 1)}^"
91
+ end
92
+
93
+ def failure_character
94
+ l = current_line @failing_rule_offset
95
+ c = current_column @failing_rule_offset
96
+ lines[l-1][c-1, 1]
97
+ end
98
+
99
+ def failure_oneline
100
+ l = current_line @failing_rule_offset
101
+ c = current_column @failing_rule_offset
102
+
103
+ char = lines[l-1][c-1, 1]
104
+
105
+ if @failed_rule.kind_of? Symbol
106
+ info = self.class::Rules[@failed_rule]
107
+ "@#{l}:#{c} failed rule '#{info.name}', got '#{char}'"
108
+ else
109
+ "@#{l}:#{c} failed rule '#{@failed_rule}', got '#{char}'"
110
+ end
111
+ end
112
+
113
+ class ParseError < RuntimeError
114
+ end
115
+
116
+ def raise_error
117
+ raise ParseError, failure_oneline
118
+ end
119
+
120
+ def show_error(io=STDOUT)
121
+ error_pos = @failing_rule_offset
122
+ line_no = current_line(error_pos)
123
+ col_no = current_column(error_pos)
124
+
125
+ io.puts "On line #{line_no}, column #{col_no}:"
126
+
127
+ if @failed_rule.kind_of? Symbol
128
+ info = self.class::Rules[@failed_rule]
129
+ io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
130
+ else
131
+ io.puts "Failed to match rule '#{@failed_rule}'"
132
+ end
133
+
134
+ io.puts "Got: #{string[error_pos,1].inspect}"
135
+ line = lines[line_no-1]
136
+ io.puts "=> #{line}"
137
+ io.print(" " * (col_no + 3))
138
+ io.puts "^"
139
+ end
140
+
141
+ def set_failed_rule(name)
142
+ if @pos > @failing_rule_offset
143
+ @failed_rule = name
144
+ @failing_rule_offset = @pos
145
+ end
146
+ end
147
+
148
+ attr_reader :failed_rule
149
+
150
+ def match_string(str)
151
+ len = str.size
152
+ if @string[pos,len] == str
153
+ @pos += len
154
+ return str
155
+ end
156
+
157
+ return nil
158
+ end
159
+
160
+ def scan(reg)
161
+ if m = reg.match(@string[@pos..-1])
162
+ width = m.end(0)
163
+ @pos += width
164
+ return true
165
+ end
166
+
167
+ return nil
168
+ end
169
+
170
+ if "".respond_to? :getbyte
171
+ def get_byte
172
+ if @pos >= @string.size
173
+ return nil
174
+ end
175
+
176
+ s = @string.getbyte @pos
177
+ @pos += 1
178
+ s
179
+ end
180
+ else
181
+ def get_byte
182
+ if @pos >= @string.size
183
+ return nil
184
+ end
185
+
186
+ s = @string[@pos]
187
+ @pos += 1
188
+ s
189
+ end
190
+ end
191
+
192
+ def parse(rule=nil)
193
+ # We invoke the rules indirectly via apply
194
+ # instead of by just calling them as methods because
195
+ # if the rules use left recursion, apply needs to
196
+ # manage that.
197
+
198
+ if !rule
199
+ apply(:_root)
200
+ else
201
+ method = rule.gsub("-","_hyphen_")
202
+ apply :"_#{method}"
203
+ end
204
+ end
205
+
206
+ class MemoEntry
207
+ def initialize(ans, pos)
208
+ @ans = ans
209
+ @pos = pos
210
+ @result = nil
211
+ @set = false
212
+ @left_rec = false
213
+ end
214
+
215
+ attr_reader :ans, :pos, :result, :set
216
+ attr_accessor :left_rec
217
+
218
+ def move!(ans, pos, result)
219
+ @ans = ans
220
+ @pos = pos
221
+ @result = result
222
+ @set = true
223
+ @left_rec = false
224
+ end
225
+ end
226
+
227
+ def external_invoke(other, rule, *args)
228
+ old_pos = @pos
229
+ old_string = @string
230
+
231
+ @pos = other.pos
232
+ @string = other.string
233
+
234
+ begin
235
+ if val = __send__(rule, *args)
236
+ other.pos = @pos
237
+ other.result = @result
238
+ else
239
+ other.set_failed_rule "#{self.class}##{rule}"
240
+ end
241
+ val
242
+ ensure
243
+ @pos = old_pos
244
+ @string = old_string
245
+ end
246
+ end
247
+
248
+ def apply_with_args(rule, *args)
249
+ memo_key = [rule, args]
250
+ if m = @memoizations[memo_key][@pos]
251
+ @pos = m.pos
252
+ if !m.set
253
+ m.left_rec = true
254
+ return nil
255
+ end
256
+
257
+ @result = m.result
258
+
259
+ return m.ans
260
+ else
261
+ m = MemoEntry.new(nil, @pos)
262
+ @memoizations[memo_key][@pos] = m
263
+ start_pos = @pos
264
+
265
+ ans = __send__ rule, *args
266
+
267
+ lr = m.left_rec
268
+
269
+ m.move! ans, @pos, @result
270
+
271
+ # Don't bother trying to grow the left recursion
272
+ # if it's failing straight away (thus there is no seed)
273
+ if ans and lr
274
+ return grow_lr(rule, args, start_pos, m)
275
+ else
276
+ return ans
277
+ end
278
+
279
+ return ans
280
+ end
281
+ end
282
+
283
+ def apply(rule)
284
+ if m = @memoizations[rule][@pos]
285
+ @pos = m.pos
286
+ if !m.set
287
+ m.left_rec = true
288
+ return nil
289
+ end
290
+
291
+ @result = m.result
292
+
293
+ return m.ans
294
+ else
295
+ m = MemoEntry.new(nil, @pos)
296
+ @memoizations[rule][@pos] = m
297
+ start_pos = @pos
298
+
299
+ ans = __send__ rule
300
+
301
+ lr = m.left_rec
302
+
303
+ m.move! ans, @pos, @result
304
+
305
+ # Don't bother trying to grow the left recursion
306
+ # if it's failing straight away (thus there is no seed)
307
+ if ans and lr
308
+ return grow_lr(rule, nil, start_pos, m)
309
+ else
310
+ return ans
311
+ end
312
+
313
+ return ans
314
+ end
315
+ end
316
+
317
+ def grow_lr(rule, args, start_pos, m)
318
+ while true
319
+ @pos = start_pos
320
+ @result = m.result
321
+
322
+ if args
323
+ ans = __send__ rule, *args
324
+ else
325
+ ans = __send__ rule
326
+ end
327
+ return nil unless ans
328
+
329
+ break if @pos <= m.pos
330
+
331
+ m.move! ans, @pos, @result
332
+ end
333
+
334
+ @result = m.result
335
+ @pos = m.pos
336
+ return m.ans
337
+ end
338
+
339
+ class RuleInfo
340
+ def initialize(name, rendered)
341
+ @name = name
342
+ @rendered = rendered
343
+ end
344
+
345
+ attr_reader :name, :rendered
346
+ end
347
+
348
+ def self.rule_info(name, rendered)
349
+ RuleInfo.new(name, rendered)
350
+ end
351
+
352
+
353
+ # :startdoc:
354
+ # :stopdoc:
355
+
356
+ module AST
357
+ class Node; end
358
+ class Comment < Node
359
+ def initialize(text)
360
+ @text = text
361
+ end
362
+ attr_reader :text
363
+ end
364
+ class ConstDouble < Node
365
+ def initialize(value)
366
+ @value = value
367
+ end
368
+ attr_reader :value
369
+ end
370
+ class ConstIdentifier < Node
371
+ def initialize(value)
372
+ @value = value
373
+ end
374
+ attr_reader :value
375
+ end
376
+ class ConstInt < Node
377
+ def initialize(value)
378
+ @value = value
379
+ end
380
+ attr_reader :value
381
+ end
382
+ class ConstList < Node
383
+ def initialize(values)
384
+ @values = values
385
+ end
386
+ attr_reader :values
387
+ end
388
+ class ConstMap < Node
389
+ def initialize(values)
390
+ @values = values
391
+ end
392
+ attr_reader :values
393
+ end
394
+ class ConstString < Node
395
+ def initialize(value)
396
+ @value = value
397
+ end
398
+ attr_reader :value
399
+ end
400
+ class Enum < Node
401
+ def initialize(name, values)
402
+ @name = name
403
+ @values = values
404
+ end
405
+ attr_reader :name
406
+ attr_reader :values
407
+ end
408
+ class Exception < Node
409
+ def initialize(name, fields)
410
+ @name = name
411
+ @fields = fields
412
+ end
413
+ attr_reader :name
414
+ attr_reader :fields
415
+ end
416
+ class Field < Node
417
+ def initialize(index, type, name, value, options)
418
+ @index = index
419
+ @type = type
420
+ @name = name
421
+ @value = value
422
+ @options = options
423
+ end
424
+ attr_reader :index
425
+ attr_reader :type
426
+ attr_reader :name
427
+ attr_reader :value
428
+ attr_reader :options
429
+ end
430
+ class Function < Node
431
+ def initialize(name, return_type, arguments)
432
+ @name = name
433
+ @return_type = return_type
434
+ @arguments = arguments
435
+ end
436
+ attr_reader :name
437
+ attr_reader :return_type
438
+ attr_reader :arguments
439
+ end
440
+ class Include < Node
441
+ def initialize(path)
442
+ @path = path
443
+ end
444
+ attr_reader :path
445
+ end
446
+ class List < Node
447
+ def initialize(value)
448
+ @value = value
449
+ end
450
+ attr_reader :value
451
+ end
452
+ class Map < Node
453
+ def initialize(key, value)
454
+ @key = key
455
+ @value = value
456
+ end
457
+ attr_reader :key
458
+ attr_reader :value
459
+ end
460
+ class Namespace < Node
461
+ def initialize(lang, namespace)
462
+ @lang = lang
463
+ @namespace = namespace
464
+ end
465
+ attr_reader :lang
466
+ attr_reader :namespace
467
+ end
468
+ class Service < Node
469
+ def initialize(name, functions)
470
+ @name = name
471
+ @functions = functions
472
+ end
473
+ attr_reader :name
474
+ attr_reader :functions
475
+ end
476
+ class Set < Node
477
+ def initialize(value)
478
+ @value = value
479
+ end
480
+ attr_reader :value
481
+ end
482
+ class Struct < Node
483
+ def initialize(type, name, fields)
484
+ @type = type
485
+ @name = name
486
+ @fields = fields
487
+ end
488
+ attr_reader :type
489
+ attr_reader :name
490
+ attr_reader :fields
491
+ end
492
+ end
493
+ def comment(text)
494
+ AST::Comment.new(text)
495
+ end
496
+ def const_dbl(value)
497
+ AST::ConstDouble.new(value)
498
+ end
499
+ def const_id(value)
500
+ AST::ConstIdentifier.new(value)
501
+ end
502
+ def const_int(value)
503
+ AST::ConstInt.new(value)
504
+ end
505
+ def const_list(values)
506
+ AST::ConstList.new(values)
507
+ end
508
+ def const_map(values)
509
+ AST::ConstMap.new(values)
510
+ end
511
+ def const_str(value)
512
+ AST::ConstString.new(value)
513
+ end
514
+ def enum(name, values)
515
+ AST::Enum.new(name, values)
516
+ end
517
+ def exception(name, fields)
518
+ AST::Exception.new(name, fields)
519
+ end
520
+ def field(index, type, name, value, options)
521
+ AST::Field.new(index, type, name, value, options)
522
+ end
523
+ def function(name, return_type, arguments)
524
+ AST::Function.new(name, return_type, arguments)
525
+ end
526
+ def include(path)
527
+ AST::Include.new(path)
528
+ end
529
+ def list(value)
530
+ AST::List.new(value)
531
+ end
532
+ def map(key, value)
533
+ AST::Map.new(key, value)
534
+ end
535
+ def namespace(lang, namespace)
536
+ AST::Namespace.new(lang, namespace)
537
+ end
538
+ def service(name, functions)
539
+ AST::Service.new(name, functions)
540
+ end
541
+ def set(value)
542
+ AST::Set.new(value)
543
+ end
544
+ def struct(type, name, fields)
545
+ AST::Struct.new(type, name, fields)
546
+ end
547
+ def setup_foreign_grammar; end
548
+
549
+ # intconstant = /([+-]?[0-9]+)/
550
+ def _intconstant
551
+ _tmp = scan(/\A(?-mix:([+-]?[0-9]+))/)
552
+ set_failed_rule :_intconstant unless _tmp
553
+ return _tmp
554
+ end
555
+
556
+ # hexconstant = /("0x"[0-9A-Fa-f]+)/
557
+ def _hexconstant
558
+ _tmp = scan(/\A(?-mix:("0x"[0-9A-Fa-f]+))/)
559
+ set_failed_rule :_hexconstant unless _tmp
560
+ return _tmp
561
+ end
562
+
563
+ # dubconstant = (/([+-]?[0-9]+(\.[0-9]+)([eE][+-]?[0-9]+)?)/ | /([+-]?[0-9]+([eE][+-]?[0-9]+))/ | /([+-]?(\.[0-9]+)([eE][+-]?[0-9]+)?)/)
564
+ def _dubconstant
565
+
566
+ _save = self.pos
567
+ while true # choice
568
+ _tmp = scan(/\A(?-mix:([+-]?[0-9]+(\.[0-9]+)([eE][+-]?[0-9]+)?))/)
569
+ break if _tmp
570
+ self.pos = _save
571
+ _tmp = scan(/\A(?-mix:([+-]?[0-9]+([eE][+-]?[0-9]+)))/)
572
+ break if _tmp
573
+ self.pos = _save
574
+ _tmp = scan(/\A(?-mix:([+-]?(\.[0-9]+)([eE][+-]?[0-9]+)?))/)
575
+ break if _tmp
576
+ self.pos = _save
577
+ break
578
+ end # end choice
579
+
580
+ set_failed_rule :_dubconstant unless _tmp
581
+ return _tmp
582
+ end
583
+
584
+ # identifier = /([a-zA-Z_][\.a-zA-Z_0-9]*)/
585
+ def _identifier
586
+ _tmp = scan(/\A(?-mix:([a-zA-Z_][\.a-zA-Z_0-9]*))/)
587
+ set_failed_rule :_identifier unless _tmp
588
+ return _tmp
589
+ end
590
+
591
+ # whitespace = /([ \t\r\n]*)/
592
+ def _whitespace
593
+ _tmp = scan(/\A(?-mix:([ \t\r\n]*))/)
594
+ set_failed_rule :_whitespace unless _tmp
595
+ return _tmp
596
+ end
597
+
598
+ # st_identifier = /([a-zA-Z-][\.a-zA-Z_0-9-]*)/
599
+ def _st_identifier
600
+ _tmp = scan(/\A(?-mix:([a-zA-Z-][\.a-zA-Z_0-9-]*))/)
601
+ set_failed_rule :_st_identifier unless _tmp
602
+ return _tmp
603
+ end
604
+
605
+ # literal_begin = /(['\"])/
606
+ def _literal_begin
607
+ _tmp = scan(/\A(?-mix:(['\"]))/)
608
+ set_failed_rule :_literal_begin unless _tmp
609
+ return _tmp
610
+ end
611
+
612
+ # reserved = ("BEGIN" | "END" | "__CLASS__" | "__DIR__" | "__FILE__" | "__FUNCTION__" | "__LINE__" | "__METHOD__" | "__NAMESPACE__" | "abstract" | "alias" | "and" | "args" | "as" | "assert" | "begin" | "break" | "case" | "catch" | "class" | "clone" | "continue" | "declare" | "def" | "default" | "del" | "delete" | "do" | "dynamic" | "elif" | "else" | "elseif" | "elsif" | "end" | "enddeclare" | "endfor" | "endforeach" | "endif" | "endswitch" | "endwhile" | "ensure" | "except" | "exec" | "finally" | "float" | "for" | "foreach" | "function" | "global" | "goto" | "if" | "implements" | "import" | "in" | "inline" | "instanceof" | "interface" | "is" | "lambda" | "module" | "native" | "new" | "next" | "nil" | "not" | "or" | "pass" | "public" | "print" | "private" | "protected" | "public" | "raise" | "redo" | "rescue" | "retry" | "register" | "return" | "self" | "sizeof" | "static" | "super" | "switch" | "synchronized" | "then" | "this" | "throw" | "transient" | "try" | "undef" | "union" | "unless" | "unsigned" | "until" | "use" | "var" | "virtual" | "volatile" | "when" | "while" | "with" | "xor" | "yield")
613
+ def _reserved
614
+
615
+ _save = self.pos
616
+ while true # choice
617
+ _tmp = match_string("BEGIN")
618
+ break if _tmp
619
+ self.pos = _save
620
+ _tmp = match_string("END")
621
+ break if _tmp
622
+ self.pos = _save
623
+ _tmp = match_string("__CLASS__")
624
+ break if _tmp
625
+ self.pos = _save
626
+ _tmp = match_string("__DIR__")
627
+ break if _tmp
628
+ self.pos = _save
629
+ _tmp = match_string("__FILE__")
630
+ break if _tmp
631
+ self.pos = _save
632
+ _tmp = match_string("__FUNCTION__")
633
+ break if _tmp
634
+ self.pos = _save
635
+ _tmp = match_string("__LINE__")
636
+ break if _tmp
637
+ self.pos = _save
638
+ _tmp = match_string("__METHOD__")
639
+ break if _tmp
640
+ self.pos = _save
641
+ _tmp = match_string("__NAMESPACE__")
642
+ break if _tmp
643
+ self.pos = _save
644
+ _tmp = match_string("abstract")
645
+ break if _tmp
646
+ self.pos = _save
647
+ _tmp = match_string("alias")
648
+ break if _tmp
649
+ self.pos = _save
650
+ _tmp = match_string("and")
651
+ break if _tmp
652
+ self.pos = _save
653
+ _tmp = match_string("args")
654
+ break if _tmp
655
+ self.pos = _save
656
+ _tmp = match_string("as")
657
+ break if _tmp
658
+ self.pos = _save
659
+ _tmp = match_string("assert")
660
+ break if _tmp
661
+ self.pos = _save
662
+ _tmp = match_string("begin")
663
+ break if _tmp
664
+ self.pos = _save
665
+ _tmp = match_string("break")
666
+ break if _tmp
667
+ self.pos = _save
668
+ _tmp = match_string("case")
669
+ break if _tmp
670
+ self.pos = _save
671
+ _tmp = match_string("catch")
672
+ break if _tmp
673
+ self.pos = _save
674
+ _tmp = match_string("class")
675
+ break if _tmp
676
+ self.pos = _save
677
+ _tmp = match_string("clone")
678
+ break if _tmp
679
+ self.pos = _save
680
+ _tmp = match_string("continue")
681
+ break if _tmp
682
+ self.pos = _save
683
+ _tmp = match_string("declare")
684
+ break if _tmp
685
+ self.pos = _save
686
+ _tmp = match_string("def")
687
+ break if _tmp
688
+ self.pos = _save
689
+ _tmp = match_string("default")
690
+ break if _tmp
691
+ self.pos = _save
692
+ _tmp = match_string("del")
693
+ break if _tmp
694
+ self.pos = _save
695
+ _tmp = match_string("delete")
696
+ break if _tmp
697
+ self.pos = _save
698
+ _tmp = match_string("do")
699
+ break if _tmp
700
+ self.pos = _save
701
+ _tmp = match_string("dynamic")
702
+ break if _tmp
703
+ self.pos = _save
704
+ _tmp = match_string("elif")
705
+ break if _tmp
706
+ self.pos = _save
707
+ _tmp = match_string("else")
708
+ break if _tmp
709
+ self.pos = _save
710
+ _tmp = match_string("elseif")
711
+ break if _tmp
712
+ self.pos = _save
713
+ _tmp = match_string("elsif")
714
+ break if _tmp
715
+ self.pos = _save
716
+ _tmp = match_string("end")
717
+ break if _tmp
718
+ self.pos = _save
719
+ _tmp = match_string("enddeclare")
720
+ break if _tmp
721
+ self.pos = _save
722
+ _tmp = match_string("endfor")
723
+ break if _tmp
724
+ self.pos = _save
725
+ _tmp = match_string("endforeach")
726
+ break if _tmp
727
+ self.pos = _save
728
+ _tmp = match_string("endif")
729
+ break if _tmp
730
+ self.pos = _save
731
+ _tmp = match_string("endswitch")
732
+ break if _tmp
733
+ self.pos = _save
734
+ _tmp = match_string("endwhile")
735
+ break if _tmp
736
+ self.pos = _save
737
+ _tmp = match_string("ensure")
738
+ break if _tmp
739
+ self.pos = _save
740
+ _tmp = match_string("except")
741
+ break if _tmp
742
+ self.pos = _save
743
+ _tmp = match_string("exec")
744
+ break if _tmp
745
+ self.pos = _save
746
+ _tmp = match_string("finally")
747
+ break if _tmp
748
+ self.pos = _save
749
+ _tmp = match_string("float")
750
+ break if _tmp
751
+ self.pos = _save
752
+ _tmp = match_string("for")
753
+ break if _tmp
754
+ self.pos = _save
755
+ _tmp = match_string("foreach")
756
+ break if _tmp
757
+ self.pos = _save
758
+ _tmp = match_string("function")
759
+ break if _tmp
760
+ self.pos = _save
761
+ _tmp = match_string("global")
762
+ break if _tmp
763
+ self.pos = _save
764
+ _tmp = match_string("goto")
765
+ break if _tmp
766
+ self.pos = _save
767
+ _tmp = match_string("if")
768
+ break if _tmp
769
+ self.pos = _save
770
+ _tmp = match_string("implements")
771
+ break if _tmp
772
+ self.pos = _save
773
+ _tmp = match_string("import")
774
+ break if _tmp
775
+ self.pos = _save
776
+ _tmp = match_string("in")
777
+ break if _tmp
778
+ self.pos = _save
779
+ _tmp = match_string("inline")
780
+ break if _tmp
781
+ self.pos = _save
782
+ _tmp = match_string("instanceof")
783
+ break if _tmp
784
+ self.pos = _save
785
+ _tmp = match_string("interface")
786
+ break if _tmp
787
+ self.pos = _save
788
+ _tmp = match_string("is")
789
+ break if _tmp
790
+ self.pos = _save
791
+ _tmp = match_string("lambda")
792
+ break if _tmp
793
+ self.pos = _save
794
+ _tmp = match_string("module")
795
+ break if _tmp
796
+ self.pos = _save
797
+ _tmp = match_string("native")
798
+ break if _tmp
799
+ self.pos = _save
800
+ _tmp = match_string("new")
801
+ break if _tmp
802
+ self.pos = _save
803
+ _tmp = match_string("next")
804
+ break if _tmp
805
+ self.pos = _save
806
+ _tmp = match_string("nil")
807
+ break if _tmp
808
+ self.pos = _save
809
+ _tmp = match_string("not")
810
+ break if _tmp
811
+ self.pos = _save
812
+ _tmp = match_string("or")
813
+ break if _tmp
814
+ self.pos = _save
815
+ _tmp = match_string("pass")
816
+ break if _tmp
817
+ self.pos = _save
818
+ _tmp = match_string("public")
819
+ break if _tmp
820
+ self.pos = _save
821
+ _tmp = match_string("print")
822
+ break if _tmp
823
+ self.pos = _save
824
+ _tmp = match_string("private")
825
+ break if _tmp
826
+ self.pos = _save
827
+ _tmp = match_string("protected")
828
+ break if _tmp
829
+ self.pos = _save
830
+ _tmp = match_string("public")
831
+ break if _tmp
832
+ self.pos = _save
833
+ _tmp = match_string("raise")
834
+ break if _tmp
835
+ self.pos = _save
836
+ _tmp = match_string("redo")
837
+ break if _tmp
838
+ self.pos = _save
839
+ _tmp = match_string("rescue")
840
+ break if _tmp
841
+ self.pos = _save
842
+ _tmp = match_string("retry")
843
+ break if _tmp
844
+ self.pos = _save
845
+ _tmp = match_string("register")
846
+ break if _tmp
847
+ self.pos = _save
848
+ _tmp = match_string("return")
849
+ break if _tmp
850
+ self.pos = _save
851
+ _tmp = match_string("self")
852
+ break if _tmp
853
+ self.pos = _save
854
+ _tmp = match_string("sizeof")
855
+ break if _tmp
856
+ self.pos = _save
857
+ _tmp = match_string("static")
858
+ break if _tmp
859
+ self.pos = _save
860
+ _tmp = match_string("super")
861
+ break if _tmp
862
+ self.pos = _save
863
+ _tmp = match_string("switch")
864
+ break if _tmp
865
+ self.pos = _save
866
+ _tmp = match_string("synchronized")
867
+ break if _tmp
868
+ self.pos = _save
869
+ _tmp = match_string("then")
870
+ break if _tmp
871
+ self.pos = _save
872
+ _tmp = match_string("this")
873
+ break if _tmp
874
+ self.pos = _save
875
+ _tmp = match_string("throw")
876
+ break if _tmp
877
+ self.pos = _save
878
+ _tmp = match_string("transient")
879
+ break if _tmp
880
+ self.pos = _save
881
+ _tmp = match_string("try")
882
+ break if _tmp
883
+ self.pos = _save
884
+ _tmp = match_string("undef")
885
+ break if _tmp
886
+ self.pos = _save
887
+ _tmp = match_string("union")
888
+ break if _tmp
889
+ self.pos = _save
890
+ _tmp = match_string("unless")
891
+ break if _tmp
892
+ self.pos = _save
893
+ _tmp = match_string("unsigned")
894
+ break if _tmp
895
+ self.pos = _save
896
+ _tmp = match_string("until")
897
+ break if _tmp
898
+ self.pos = _save
899
+ _tmp = match_string("use")
900
+ break if _tmp
901
+ self.pos = _save
902
+ _tmp = match_string("var")
903
+ break if _tmp
904
+ self.pos = _save
905
+ _tmp = match_string("virtual")
906
+ break if _tmp
907
+ self.pos = _save
908
+ _tmp = match_string("volatile")
909
+ break if _tmp
910
+ self.pos = _save
911
+ _tmp = match_string("when")
912
+ break if _tmp
913
+ self.pos = _save
914
+ _tmp = match_string("while")
915
+ break if _tmp
916
+ self.pos = _save
917
+ _tmp = match_string("with")
918
+ break if _tmp
919
+ self.pos = _save
920
+ _tmp = match_string("xor")
921
+ break if _tmp
922
+ self.pos = _save
923
+ _tmp = match_string("yield")
924
+ break if _tmp
925
+ self.pos = _save
926
+ break
927
+ end # end choice
928
+
929
+ set_failed_rule :_reserved unless _tmp
930
+ return _tmp
931
+ end
932
+
933
+ # tok_int_constant = (< intconstant > { text.to_i } | < hexconstant > { text.to_i } | "false" { 0 } | "true" { 1 })
934
+ def _tok_int_constant
935
+
936
+ _save = self.pos
937
+ while true # choice
938
+
939
+ _save1 = self.pos
940
+ while true # sequence
941
+ _text_start = self.pos
942
+ _tmp = apply(:_intconstant)
943
+ if _tmp
944
+ text = get_text(_text_start)
945
+ end
946
+ unless _tmp
947
+ self.pos = _save1
948
+ break
949
+ end
950
+ @result = begin; text.to_i ; end
951
+ _tmp = true
952
+ unless _tmp
953
+ self.pos = _save1
954
+ end
955
+ break
956
+ end # end sequence
957
+
958
+ break if _tmp
959
+ self.pos = _save
960
+
961
+ _save2 = self.pos
962
+ while true # sequence
963
+ _text_start = self.pos
964
+ _tmp = apply(:_hexconstant)
965
+ if _tmp
966
+ text = get_text(_text_start)
967
+ end
968
+ unless _tmp
969
+ self.pos = _save2
970
+ break
971
+ end
972
+ @result = begin; text.to_i ; end
973
+ _tmp = true
974
+ unless _tmp
975
+ self.pos = _save2
976
+ end
977
+ break
978
+ end # end sequence
979
+
980
+ break if _tmp
981
+ self.pos = _save
982
+
983
+ _save3 = self.pos
984
+ while true # sequence
985
+ _tmp = match_string("false")
986
+ unless _tmp
987
+ self.pos = _save3
988
+ break
989
+ end
990
+ @result = begin; 0 ; end
991
+ _tmp = true
992
+ unless _tmp
993
+ self.pos = _save3
994
+ end
995
+ break
996
+ end # end sequence
997
+
998
+ break if _tmp
999
+ self.pos = _save
1000
+
1001
+ _save4 = self.pos
1002
+ while true # sequence
1003
+ _tmp = match_string("true")
1004
+ unless _tmp
1005
+ self.pos = _save4
1006
+ break
1007
+ end
1008
+ @result = begin; 1 ; end
1009
+ _tmp = true
1010
+ unless _tmp
1011
+ self.pos = _save4
1012
+ end
1013
+ break
1014
+ end # end sequence
1015
+
1016
+ break if _tmp
1017
+ self.pos = _save
1018
+ break
1019
+ end # end choice
1020
+
1021
+ set_failed_rule :_tok_int_constant unless _tmp
1022
+ return _tmp
1023
+ end
1024
+
1025
+ # tok_dub_constant = dubconstant:f { f.to_f }
1026
+ def _tok_dub_constant
1027
+
1028
+ _save = self.pos
1029
+ while true # sequence
1030
+ _tmp = apply(:_dubconstant)
1031
+ f = @result
1032
+ unless _tmp
1033
+ self.pos = _save
1034
+ break
1035
+ end
1036
+ @result = begin; f.to_f ; end
1037
+ _tmp = true
1038
+ unless _tmp
1039
+ self.pos = _save
1040
+ end
1041
+ break
1042
+ end # end sequence
1043
+
1044
+ set_failed_rule :_tok_dub_constant unless _tmp
1045
+ return _tmp
1046
+ end
1047
+
1048
+ # tok_identifier = < identifier > {text}
1049
+ def _tok_identifier
1050
+
1051
+ _save = self.pos
1052
+ while true # sequence
1053
+ _text_start = self.pos
1054
+ _tmp = apply(:_identifier)
1055
+ if _tmp
1056
+ text = get_text(_text_start)
1057
+ end
1058
+ unless _tmp
1059
+ self.pos = _save
1060
+ break
1061
+ end
1062
+ @result = begin; text; end
1063
+ _tmp = true
1064
+ unless _tmp
1065
+ self.pos = _save
1066
+ end
1067
+ break
1068
+ end # end sequence
1069
+
1070
+ set_failed_rule :_tok_identifier unless _tmp
1071
+ return _tmp
1072
+ end
1073
+
1074
+ # tok_st_identifier = st_identifier
1075
+ def _tok_st_identifier
1076
+ _tmp = apply(:_st_identifier)
1077
+ set_failed_rule :_tok_st_identifier unless _tmp
1078
+ return _tmp
1079
+ end
1080
+
1081
+ # escapes = ("\\r" { "\r" } | "\\n" { "\n" } | "\\t" { "\t" } | "\\\"" { "\"" } | "\\'" { "'" } | "\\\\" { "\\" })
1082
+ def _escapes
1083
+
1084
+ _save = self.pos
1085
+ while true # choice
1086
+
1087
+ _save1 = self.pos
1088
+ while true # sequence
1089
+ _tmp = match_string("\\r")
1090
+ unless _tmp
1091
+ self.pos = _save1
1092
+ break
1093
+ end
1094
+ @result = begin; "\r" ; end
1095
+ _tmp = true
1096
+ unless _tmp
1097
+ self.pos = _save1
1098
+ end
1099
+ break
1100
+ end # end sequence
1101
+
1102
+ break if _tmp
1103
+ self.pos = _save
1104
+
1105
+ _save2 = self.pos
1106
+ while true # sequence
1107
+ _tmp = match_string("\\n")
1108
+ unless _tmp
1109
+ self.pos = _save2
1110
+ break
1111
+ end
1112
+ @result = begin; "\n" ; end
1113
+ _tmp = true
1114
+ unless _tmp
1115
+ self.pos = _save2
1116
+ end
1117
+ break
1118
+ end # end sequence
1119
+
1120
+ break if _tmp
1121
+ self.pos = _save
1122
+
1123
+ _save3 = self.pos
1124
+ while true # sequence
1125
+ _tmp = match_string("\\t")
1126
+ unless _tmp
1127
+ self.pos = _save3
1128
+ break
1129
+ end
1130
+ @result = begin; "\t" ; end
1131
+ _tmp = true
1132
+ unless _tmp
1133
+ self.pos = _save3
1134
+ end
1135
+ break
1136
+ end # end sequence
1137
+
1138
+ break if _tmp
1139
+ self.pos = _save
1140
+
1141
+ _save4 = self.pos
1142
+ while true # sequence
1143
+ _tmp = match_string("\\\"")
1144
+ unless _tmp
1145
+ self.pos = _save4
1146
+ break
1147
+ end
1148
+ @result = begin; "\"" ; end
1149
+ _tmp = true
1150
+ unless _tmp
1151
+ self.pos = _save4
1152
+ end
1153
+ break
1154
+ end # end sequence
1155
+
1156
+ break if _tmp
1157
+ self.pos = _save
1158
+
1159
+ _save5 = self.pos
1160
+ while true # sequence
1161
+ _tmp = match_string("\\'")
1162
+ unless _tmp
1163
+ self.pos = _save5
1164
+ break
1165
+ end
1166
+ @result = begin; "'" ; end
1167
+ _tmp = true
1168
+ unless _tmp
1169
+ self.pos = _save5
1170
+ end
1171
+ break
1172
+ end # end sequence
1173
+
1174
+ break if _tmp
1175
+ self.pos = _save
1176
+
1177
+ _save6 = self.pos
1178
+ while true # sequence
1179
+ _tmp = match_string("\\\\")
1180
+ unless _tmp
1181
+ self.pos = _save6
1182
+ break
1183
+ end
1184
+ @result = begin; "\\" ; end
1185
+ _tmp = true
1186
+ unless _tmp
1187
+ self.pos = _save6
1188
+ end
1189
+ break
1190
+ end # end sequence
1191
+
1192
+ break if _tmp
1193
+ self.pos = _save
1194
+ break
1195
+ end # end choice
1196
+
1197
+ set_failed_rule :_escapes unless _tmp
1198
+ return _tmp
1199
+ end
1200
+
1201
+ # tok_literal = ("\"" < (escapes | !"\"" .)* > "\"" {text} | "'" < (escapes | !"'" .)* > "'" {text})
1202
+ def _tok_literal
1203
+
1204
+ _save = self.pos
1205
+ while true # choice
1206
+
1207
+ _save1 = self.pos
1208
+ while true # sequence
1209
+ _tmp = match_string("\"")
1210
+ unless _tmp
1211
+ self.pos = _save1
1212
+ break
1213
+ end
1214
+ _text_start = self.pos
1215
+ while true
1216
+
1217
+ _save3 = self.pos
1218
+ while true # choice
1219
+ _tmp = apply(:_escapes)
1220
+ break if _tmp
1221
+ self.pos = _save3
1222
+
1223
+ _save4 = self.pos
1224
+ while true # sequence
1225
+ _save5 = self.pos
1226
+ _tmp = match_string("\"")
1227
+ _tmp = _tmp ? nil : true
1228
+ self.pos = _save5
1229
+ unless _tmp
1230
+ self.pos = _save4
1231
+ break
1232
+ end
1233
+ _tmp = get_byte
1234
+ unless _tmp
1235
+ self.pos = _save4
1236
+ end
1237
+ break
1238
+ end # end sequence
1239
+
1240
+ break if _tmp
1241
+ self.pos = _save3
1242
+ break
1243
+ end # end choice
1244
+
1245
+ break unless _tmp
1246
+ end
1247
+ _tmp = true
1248
+ if _tmp
1249
+ text = get_text(_text_start)
1250
+ end
1251
+ unless _tmp
1252
+ self.pos = _save1
1253
+ break
1254
+ end
1255
+ _tmp = match_string("\"")
1256
+ unless _tmp
1257
+ self.pos = _save1
1258
+ break
1259
+ end
1260
+ @result = begin; text; end
1261
+ _tmp = true
1262
+ unless _tmp
1263
+ self.pos = _save1
1264
+ end
1265
+ break
1266
+ end # end sequence
1267
+
1268
+ break if _tmp
1269
+ self.pos = _save
1270
+
1271
+ _save6 = self.pos
1272
+ while true # sequence
1273
+ _tmp = match_string("'")
1274
+ unless _tmp
1275
+ self.pos = _save6
1276
+ break
1277
+ end
1278
+ _text_start = self.pos
1279
+ while true
1280
+
1281
+ _save8 = self.pos
1282
+ while true # choice
1283
+ _tmp = apply(:_escapes)
1284
+ break if _tmp
1285
+ self.pos = _save8
1286
+
1287
+ _save9 = self.pos
1288
+ while true # sequence
1289
+ _save10 = self.pos
1290
+ _tmp = match_string("'")
1291
+ _tmp = _tmp ? nil : true
1292
+ self.pos = _save10
1293
+ unless _tmp
1294
+ self.pos = _save9
1295
+ break
1296
+ end
1297
+ _tmp = get_byte
1298
+ unless _tmp
1299
+ self.pos = _save9
1300
+ end
1301
+ break
1302
+ end # end sequence
1303
+
1304
+ break if _tmp
1305
+ self.pos = _save8
1306
+ break
1307
+ end # end choice
1308
+
1309
+ break unless _tmp
1310
+ end
1311
+ _tmp = true
1312
+ if _tmp
1313
+ text = get_text(_text_start)
1314
+ end
1315
+ unless _tmp
1316
+ self.pos = _save6
1317
+ break
1318
+ end
1319
+ _tmp = match_string("'")
1320
+ unless _tmp
1321
+ self.pos = _save6
1322
+ break
1323
+ end
1324
+ @result = begin; text; end
1325
+ _tmp = true
1326
+ unless _tmp
1327
+ self.pos = _save6
1328
+ end
1329
+ break
1330
+ end # end sequence
1331
+
1332
+ break if _tmp
1333
+ self.pos = _save
1334
+ break
1335
+ end # end choice
1336
+
1337
+ set_failed_rule :_tok_literal unless _tmp
1338
+ return _tmp
1339
+ end
1340
+
1341
+ # - = /[ \t]+/
1342
+ def __hyphen_
1343
+ _tmp = scan(/\A(?-mix:[ \t]+)/)
1344
+ set_failed_rule :__hyphen_ unless _tmp
1345
+ return _tmp
1346
+ end
1347
+
1348
+ # osp = /[ \t]*/
1349
+ def _osp
1350
+ _tmp = scan(/\A(?-mix:[ \t]*)/)
1351
+ set_failed_rule :_osp unless _tmp
1352
+ return _tmp
1353
+ end
1354
+
1355
+ # bsp = /[\s]+/
1356
+ def _bsp
1357
+ _tmp = scan(/\A(?-mix:[\s]+)/)
1358
+ set_failed_rule :_bsp unless _tmp
1359
+ return _tmp
1360
+ end
1361
+
1362
+ # obsp = /[\s]*/
1363
+ def _obsp
1364
+ _tmp = scan(/\A(?-mix:[\s]*)/)
1365
+ set_failed_rule :_obsp unless _tmp
1366
+ return _tmp
1367
+ end
1368
+
1369
+ # root = Program !.
1370
+ def _root
1371
+
1372
+ _save = self.pos
1373
+ while true # sequence
1374
+ _tmp = apply(:_Program)
1375
+ unless _tmp
1376
+ self.pos = _save
1377
+ break
1378
+ end
1379
+ _save1 = self.pos
1380
+ _tmp = get_byte
1381
+ _tmp = _tmp ? nil : true
1382
+ self.pos = _save1
1383
+ unless _tmp
1384
+ self.pos = _save
1385
+ end
1386
+ break
1387
+ end # end sequence
1388
+
1389
+ set_failed_rule :_root unless _tmp
1390
+ return _tmp
1391
+ end
1392
+
1393
+ # Program = Element*:a { a }
1394
+ def _Program
1395
+
1396
+ _save = self.pos
1397
+ while true # sequence
1398
+ _ary = []
1399
+ while true
1400
+ _tmp = apply(:_Element)
1401
+ _ary << @result if _tmp
1402
+ break unless _tmp
1403
+ end
1404
+ _tmp = true
1405
+ @result = _ary
1406
+ a = @result
1407
+ unless _tmp
1408
+ self.pos = _save
1409
+ break
1410
+ end
1411
+ @result = begin; a ; end
1412
+ _tmp = true
1413
+ unless _tmp
1414
+ self.pos = _save
1415
+ end
1416
+ break
1417
+ end # end sequence
1418
+
1419
+ set_failed_rule :_Program unless _tmp
1420
+ return _tmp
1421
+ end
1422
+
1423
+ # CComment = "/*" < (!"*/" .)* > "*/" obsp {comment(text)}
1424
+ def _CComment
1425
+
1426
+ _save = self.pos
1427
+ while true # sequence
1428
+ _tmp = match_string("/*")
1429
+ unless _tmp
1430
+ self.pos = _save
1431
+ break
1432
+ end
1433
+ _text_start = self.pos
1434
+ while true
1435
+
1436
+ _save2 = self.pos
1437
+ while true # sequence
1438
+ _save3 = self.pos
1439
+ _tmp = match_string("*/")
1440
+ _tmp = _tmp ? nil : true
1441
+ self.pos = _save3
1442
+ unless _tmp
1443
+ self.pos = _save2
1444
+ break
1445
+ end
1446
+ _tmp = get_byte
1447
+ unless _tmp
1448
+ self.pos = _save2
1449
+ end
1450
+ break
1451
+ end # end sequence
1452
+
1453
+ break unless _tmp
1454
+ end
1455
+ _tmp = true
1456
+ if _tmp
1457
+ text = get_text(_text_start)
1458
+ end
1459
+ unless _tmp
1460
+ self.pos = _save
1461
+ break
1462
+ end
1463
+ _tmp = match_string("*/")
1464
+ unless _tmp
1465
+ self.pos = _save
1466
+ break
1467
+ end
1468
+ _tmp = apply(:_obsp)
1469
+ unless _tmp
1470
+ self.pos = _save
1471
+ break
1472
+ end
1473
+ @result = begin; comment(text); end
1474
+ _tmp = true
1475
+ unless _tmp
1476
+ self.pos = _save
1477
+ end
1478
+ break
1479
+ end # end sequence
1480
+
1481
+ set_failed_rule :_CComment unless _tmp
1482
+ return _tmp
1483
+ end
1484
+
1485
+ # HComment = "#" < (!"\n" .)* > bsp {comment(text)}
1486
+ def _HComment
1487
+
1488
+ _save = self.pos
1489
+ while true # sequence
1490
+ _tmp = match_string("#")
1491
+ unless _tmp
1492
+ self.pos = _save
1493
+ break
1494
+ end
1495
+ _text_start = self.pos
1496
+ while true
1497
+
1498
+ _save2 = self.pos
1499
+ while true # sequence
1500
+ _save3 = self.pos
1501
+ _tmp = match_string("\n")
1502
+ _tmp = _tmp ? nil : true
1503
+ self.pos = _save3
1504
+ unless _tmp
1505
+ self.pos = _save2
1506
+ break
1507
+ end
1508
+ _tmp = get_byte
1509
+ unless _tmp
1510
+ self.pos = _save2
1511
+ end
1512
+ break
1513
+ end # end sequence
1514
+
1515
+ break unless _tmp
1516
+ end
1517
+ _tmp = true
1518
+ if _tmp
1519
+ text = get_text(_text_start)
1520
+ end
1521
+ unless _tmp
1522
+ self.pos = _save
1523
+ break
1524
+ end
1525
+ _tmp = apply(:_bsp)
1526
+ unless _tmp
1527
+ self.pos = _save
1528
+ break
1529
+ end
1530
+ @result = begin; comment(text); end
1531
+ _tmp = true
1532
+ unless _tmp
1533
+ self.pos = _save
1534
+ end
1535
+ break
1536
+ end # end sequence
1537
+
1538
+ set_failed_rule :_HComment unless _tmp
1539
+ return _tmp
1540
+ end
1541
+
1542
+ # Comment = (CComment | HComment)
1543
+ def _Comment
1544
+
1545
+ _save = self.pos
1546
+ while true # choice
1547
+ _tmp = apply(:_CComment)
1548
+ break if _tmp
1549
+ self.pos = _save
1550
+ _tmp = apply(:_HComment)
1551
+ break if _tmp
1552
+ self.pos = _save
1553
+ break
1554
+ end # end choice
1555
+
1556
+ set_failed_rule :_Comment unless _tmp
1557
+ return _tmp
1558
+ end
1559
+
1560
+ # CaptureDocText = {}
1561
+ def _CaptureDocText
1562
+ @result = begin; ; end
1563
+ _tmp = true
1564
+ set_failed_rule :_CaptureDocText unless _tmp
1565
+ return _tmp
1566
+ end
1567
+
1568
+ # DestroyDocText = {}
1569
+ def _DestroyDocText
1570
+ @result = begin; ; end
1571
+ _tmp = true
1572
+ set_failed_rule :_DestroyDocText unless _tmp
1573
+ return _tmp
1574
+ end
1575
+
1576
+ # HeaderList = (HeaderList Header | Header)
1577
+ def _HeaderList
1578
+
1579
+ _save = self.pos
1580
+ while true # choice
1581
+
1582
+ _save1 = self.pos
1583
+ while true # sequence
1584
+ _tmp = apply(:_HeaderList)
1585
+ unless _tmp
1586
+ self.pos = _save1
1587
+ break
1588
+ end
1589
+ _tmp = apply(:_Header)
1590
+ unless _tmp
1591
+ self.pos = _save1
1592
+ end
1593
+ break
1594
+ end # end sequence
1595
+
1596
+ break if _tmp
1597
+ self.pos = _save
1598
+ _tmp = apply(:_Header)
1599
+ break if _tmp
1600
+ self.pos = _save
1601
+ break
1602
+ end # end choice
1603
+
1604
+ set_failed_rule :_HeaderList unless _tmp
1605
+ return _tmp
1606
+ end
1607
+
1608
+ # Element = (Comment | Header bsp | Definition bsp)
1609
+ def _Element
1610
+
1611
+ _save = self.pos
1612
+ while true # choice
1613
+ _tmp = apply(:_Comment)
1614
+ break if _tmp
1615
+ self.pos = _save
1616
+
1617
+ _save1 = self.pos
1618
+ while true # sequence
1619
+ _tmp = apply(:_Header)
1620
+ unless _tmp
1621
+ self.pos = _save1
1622
+ break
1623
+ end
1624
+ _tmp = apply(:_bsp)
1625
+ unless _tmp
1626
+ self.pos = _save1
1627
+ end
1628
+ break
1629
+ end # end sequence
1630
+
1631
+ break if _tmp
1632
+ self.pos = _save
1633
+
1634
+ _save2 = self.pos
1635
+ while true # sequence
1636
+ _tmp = apply(:_Definition)
1637
+ unless _tmp
1638
+ self.pos = _save2
1639
+ break
1640
+ end
1641
+ _tmp = apply(:_bsp)
1642
+ unless _tmp
1643
+ self.pos = _save2
1644
+ end
1645
+ break
1646
+ end # end sequence
1647
+
1648
+ break if _tmp
1649
+ self.pos = _save
1650
+ break
1651
+ end # end choice
1652
+
1653
+ set_failed_rule :_Element unless _tmp
1654
+ return _tmp
1655
+ end
1656
+
1657
+ # Header = (Include | Namespace)
1658
+ def _Header
1659
+
1660
+ _save = self.pos
1661
+ while true # choice
1662
+ _tmp = apply(:_Include)
1663
+ break if _tmp
1664
+ self.pos = _save
1665
+ _tmp = apply(:_Namespace)
1666
+ break if _tmp
1667
+ self.pos = _save
1668
+ break
1669
+ end # end choice
1670
+
1671
+ set_failed_rule :_Header unless _tmp
1672
+ return _tmp
1673
+ end
1674
+
1675
+ # Namespace = ("namespace" - tok_identifier:l - tok_identifier:n {namespace(l,n)} | "namespace" - "*" - tok_identifier:n {namespace(nil,n)})
1676
+ def _Namespace
1677
+
1678
+ _save = self.pos
1679
+ while true # choice
1680
+
1681
+ _save1 = self.pos
1682
+ while true # sequence
1683
+ _tmp = match_string("namespace")
1684
+ unless _tmp
1685
+ self.pos = _save1
1686
+ break
1687
+ end
1688
+ _tmp = apply(:__hyphen_)
1689
+ unless _tmp
1690
+ self.pos = _save1
1691
+ break
1692
+ end
1693
+ _tmp = apply(:_tok_identifier)
1694
+ l = @result
1695
+ unless _tmp
1696
+ self.pos = _save1
1697
+ break
1698
+ end
1699
+ _tmp = apply(:__hyphen_)
1700
+ unless _tmp
1701
+ self.pos = _save1
1702
+ break
1703
+ end
1704
+ _tmp = apply(:_tok_identifier)
1705
+ n = @result
1706
+ unless _tmp
1707
+ self.pos = _save1
1708
+ break
1709
+ end
1710
+ @result = begin; namespace(l,n); end
1711
+ _tmp = true
1712
+ unless _tmp
1713
+ self.pos = _save1
1714
+ end
1715
+ break
1716
+ end # end sequence
1717
+
1718
+ break if _tmp
1719
+ self.pos = _save
1720
+
1721
+ _save2 = self.pos
1722
+ while true # sequence
1723
+ _tmp = match_string("namespace")
1724
+ unless _tmp
1725
+ self.pos = _save2
1726
+ break
1727
+ end
1728
+ _tmp = apply(:__hyphen_)
1729
+ unless _tmp
1730
+ self.pos = _save2
1731
+ break
1732
+ end
1733
+ _tmp = match_string("*")
1734
+ unless _tmp
1735
+ self.pos = _save2
1736
+ break
1737
+ end
1738
+ _tmp = apply(:__hyphen_)
1739
+ unless _tmp
1740
+ self.pos = _save2
1741
+ break
1742
+ end
1743
+ _tmp = apply(:_tok_identifier)
1744
+ n = @result
1745
+ unless _tmp
1746
+ self.pos = _save2
1747
+ break
1748
+ end
1749
+ @result = begin; namespace(nil,n); end
1750
+ _tmp = true
1751
+ unless _tmp
1752
+ self.pos = _save2
1753
+ end
1754
+ break
1755
+ end # end sequence
1756
+
1757
+ break if _tmp
1758
+ self.pos = _save
1759
+ break
1760
+ end # end choice
1761
+
1762
+ set_failed_rule :_Namespace unless _tmp
1763
+ return _tmp
1764
+ end
1765
+
1766
+ # Include = "include" - tok_literal:f {include(f)}
1767
+ def _Include
1768
+
1769
+ _save = self.pos
1770
+ while true # sequence
1771
+ _tmp = match_string("include")
1772
+ unless _tmp
1773
+ self.pos = _save
1774
+ break
1775
+ end
1776
+ _tmp = apply(:__hyphen_)
1777
+ unless _tmp
1778
+ self.pos = _save
1779
+ break
1780
+ end
1781
+ _tmp = apply(:_tok_literal)
1782
+ f = @result
1783
+ unless _tmp
1784
+ self.pos = _save
1785
+ break
1786
+ end
1787
+ @result = begin; include(f); end
1788
+ _tmp = true
1789
+ unless _tmp
1790
+ self.pos = _save
1791
+ end
1792
+ break
1793
+ end # end sequence
1794
+
1795
+ set_failed_rule :_Include unless _tmp
1796
+ return _tmp
1797
+ end
1798
+
1799
+ # DefinitionList = DefinitionList CaptureDocText Definition
1800
+ def _DefinitionList
1801
+
1802
+ _save = self.pos
1803
+ while true # sequence
1804
+ _tmp = apply(:_DefinitionList)
1805
+ unless _tmp
1806
+ self.pos = _save
1807
+ break
1808
+ end
1809
+ _tmp = apply(:_CaptureDocText)
1810
+ unless _tmp
1811
+ self.pos = _save
1812
+ break
1813
+ end
1814
+ _tmp = apply(:_Definition)
1815
+ unless _tmp
1816
+ self.pos = _save
1817
+ end
1818
+ break
1819
+ end # end sequence
1820
+
1821
+ set_failed_rule :_DefinitionList unless _tmp
1822
+ return _tmp
1823
+ end
1824
+
1825
+ # Definition = (Const | TypeDefinition | Service)
1826
+ def _Definition
1827
+
1828
+ _save = self.pos
1829
+ while true # choice
1830
+ _tmp = apply(:_Const)
1831
+ break if _tmp
1832
+ self.pos = _save
1833
+ _tmp = apply(:_TypeDefinition)
1834
+ break if _tmp
1835
+ self.pos = _save
1836
+ _tmp = apply(:_Service)
1837
+ break if _tmp
1838
+ self.pos = _save
1839
+ break
1840
+ end # end choice
1841
+
1842
+ set_failed_rule :_Definition unless _tmp
1843
+ return _tmp
1844
+ end
1845
+
1846
+ # TypeDefinition = (Typedef | Enum | Senum | Struct | Xception)
1847
+ def _TypeDefinition
1848
+
1849
+ _save = self.pos
1850
+ while true # choice
1851
+ _tmp = apply(:_Typedef)
1852
+ break if _tmp
1853
+ self.pos = _save
1854
+ _tmp = apply(:_Enum)
1855
+ break if _tmp
1856
+ self.pos = _save
1857
+ _tmp = apply(:_Senum)
1858
+ break if _tmp
1859
+ self.pos = _save
1860
+ _tmp = apply(:_Struct)
1861
+ break if _tmp
1862
+ self.pos = _save
1863
+ _tmp = apply(:_Xception)
1864
+ break if _tmp
1865
+ self.pos = _save
1866
+ break
1867
+ end # end choice
1868
+
1869
+ set_failed_rule :_TypeDefinition unless _tmp
1870
+ return _tmp
1871
+ end
1872
+
1873
+ # Typedef = "typedef" - FieldType tok_identifier
1874
+ def _Typedef
1875
+
1876
+ _save = self.pos
1877
+ while true # sequence
1878
+ _tmp = match_string("typedef")
1879
+ unless _tmp
1880
+ self.pos = _save
1881
+ break
1882
+ end
1883
+ _tmp = apply(:__hyphen_)
1884
+ unless _tmp
1885
+ self.pos = _save
1886
+ break
1887
+ end
1888
+ _tmp = apply(:_FieldType)
1889
+ unless _tmp
1890
+ self.pos = _save
1891
+ break
1892
+ end
1893
+ _tmp = apply(:_tok_identifier)
1894
+ unless _tmp
1895
+ self.pos = _save
1896
+ end
1897
+ break
1898
+ end # end sequence
1899
+
1900
+ set_failed_rule :_Typedef unless _tmp
1901
+ return _tmp
1902
+ end
1903
+
1904
+ # CommaOrSemicolonOptional = ("," | ";")? obsp
1905
+ def _CommaOrSemicolonOptional
1906
+
1907
+ _save = self.pos
1908
+ while true # sequence
1909
+ _save1 = self.pos
1910
+
1911
+ _save2 = self.pos
1912
+ while true # choice
1913
+ _tmp = match_string(",")
1914
+ break if _tmp
1915
+ self.pos = _save2
1916
+ _tmp = match_string(";")
1917
+ break if _tmp
1918
+ self.pos = _save2
1919
+ break
1920
+ end # end choice
1921
+
1922
+ unless _tmp
1923
+ _tmp = true
1924
+ self.pos = _save1
1925
+ end
1926
+ unless _tmp
1927
+ self.pos = _save
1928
+ break
1929
+ end
1930
+ _tmp = apply(:_obsp)
1931
+ unless _tmp
1932
+ self.pos = _save
1933
+ end
1934
+ break
1935
+ end # end sequence
1936
+
1937
+ set_failed_rule :_CommaOrSemicolonOptional unless _tmp
1938
+ return _tmp
1939
+ end
1940
+
1941
+ # Enum = "enum" - tok_identifier:name osp "{" obsp EnumDefList:vals obsp "}" {enum(name, vals)}
1942
+ def _Enum
1943
+
1944
+ _save = self.pos
1945
+ while true # sequence
1946
+ _tmp = match_string("enum")
1947
+ unless _tmp
1948
+ self.pos = _save
1949
+ break
1950
+ end
1951
+ _tmp = apply(:__hyphen_)
1952
+ unless _tmp
1953
+ self.pos = _save
1954
+ break
1955
+ end
1956
+ _tmp = apply(:_tok_identifier)
1957
+ name = @result
1958
+ unless _tmp
1959
+ self.pos = _save
1960
+ break
1961
+ end
1962
+ _tmp = apply(:_osp)
1963
+ unless _tmp
1964
+ self.pos = _save
1965
+ break
1966
+ end
1967
+ _tmp = match_string("{")
1968
+ unless _tmp
1969
+ self.pos = _save
1970
+ break
1971
+ end
1972
+ _tmp = apply(:_obsp)
1973
+ unless _tmp
1974
+ self.pos = _save
1975
+ break
1976
+ end
1977
+ _tmp = apply(:_EnumDefList)
1978
+ vals = @result
1979
+ unless _tmp
1980
+ self.pos = _save
1981
+ break
1982
+ end
1983
+ _tmp = apply(:_obsp)
1984
+ unless _tmp
1985
+ self.pos = _save
1986
+ break
1987
+ end
1988
+ _tmp = match_string("}")
1989
+ unless _tmp
1990
+ self.pos = _save
1991
+ break
1992
+ end
1993
+ @result = begin; enum(name, vals); end
1994
+ _tmp = true
1995
+ unless _tmp
1996
+ self.pos = _save
1997
+ end
1998
+ break
1999
+ end # end sequence
2000
+
2001
+ set_failed_rule :_Enum unless _tmp
2002
+ return _tmp
2003
+ end
2004
+
2005
+ # EnumDefList = (EnumDefList:l EnumDef:e { l + [e] } | EnumDef:e { [e] })
2006
+ def _EnumDefList
2007
+
2008
+ _save = self.pos
2009
+ while true # choice
2010
+
2011
+ _save1 = self.pos
2012
+ while true # sequence
2013
+ _tmp = apply(:_EnumDefList)
2014
+ l = @result
2015
+ unless _tmp
2016
+ self.pos = _save1
2017
+ break
2018
+ end
2019
+ _tmp = apply(:_EnumDef)
2020
+ e = @result
2021
+ unless _tmp
2022
+ self.pos = _save1
2023
+ break
2024
+ end
2025
+ @result = begin; l + [e] ; end
2026
+ _tmp = true
2027
+ unless _tmp
2028
+ self.pos = _save1
2029
+ end
2030
+ break
2031
+ end # end sequence
2032
+
2033
+ break if _tmp
2034
+ self.pos = _save
2035
+
2036
+ _save2 = self.pos
2037
+ while true # sequence
2038
+ _tmp = apply(:_EnumDef)
2039
+ e = @result
2040
+ unless _tmp
2041
+ self.pos = _save2
2042
+ break
2043
+ end
2044
+ @result = begin; [e] ; end
2045
+ _tmp = true
2046
+ unless _tmp
2047
+ self.pos = _save2
2048
+ end
2049
+ break
2050
+ end # end sequence
2051
+
2052
+ break if _tmp
2053
+ self.pos = _save
2054
+ break
2055
+ end # end choice
2056
+
2057
+ set_failed_rule :_EnumDefList unless _tmp
2058
+ return _tmp
2059
+ end
2060
+
2061
+ # EnumDef = (CaptureDocText tok_identifier "=" tok_int_constant CommaOrSemicolonOptional | CaptureDocText tok_identifier CommaOrSemicolonOptional)
2062
+ def _EnumDef
2063
+
2064
+ _save = self.pos
2065
+ while true # choice
2066
+
2067
+ _save1 = self.pos
2068
+ while true # sequence
2069
+ _tmp = apply(:_CaptureDocText)
2070
+ unless _tmp
2071
+ self.pos = _save1
2072
+ break
2073
+ end
2074
+ _tmp = apply(:_tok_identifier)
2075
+ unless _tmp
2076
+ self.pos = _save1
2077
+ break
2078
+ end
2079
+ _tmp = match_string("=")
2080
+ unless _tmp
2081
+ self.pos = _save1
2082
+ break
2083
+ end
2084
+ _tmp = apply(:_tok_int_constant)
2085
+ unless _tmp
2086
+ self.pos = _save1
2087
+ break
2088
+ end
2089
+ _tmp = apply(:_CommaOrSemicolonOptional)
2090
+ unless _tmp
2091
+ self.pos = _save1
2092
+ end
2093
+ break
2094
+ end # end sequence
2095
+
2096
+ break if _tmp
2097
+ self.pos = _save
2098
+
2099
+ _save2 = self.pos
2100
+ while true # sequence
2101
+ _tmp = apply(:_CaptureDocText)
2102
+ unless _tmp
2103
+ self.pos = _save2
2104
+ break
2105
+ end
2106
+ _tmp = apply(:_tok_identifier)
2107
+ unless _tmp
2108
+ self.pos = _save2
2109
+ break
2110
+ end
2111
+ _tmp = apply(:_CommaOrSemicolonOptional)
2112
+ unless _tmp
2113
+ self.pos = _save2
2114
+ end
2115
+ break
2116
+ end # end sequence
2117
+
2118
+ break if _tmp
2119
+ self.pos = _save
2120
+ break
2121
+ end # end choice
2122
+
2123
+ set_failed_rule :_EnumDef unless _tmp
2124
+ return _tmp
2125
+ end
2126
+
2127
+ # Senum = "senum" - tok_identifier "{" SenumDefList "}"
2128
+ def _Senum
2129
+
2130
+ _save = self.pos
2131
+ while true # sequence
2132
+ _tmp = match_string("senum")
2133
+ unless _tmp
2134
+ self.pos = _save
2135
+ break
2136
+ end
2137
+ _tmp = apply(:__hyphen_)
2138
+ unless _tmp
2139
+ self.pos = _save
2140
+ break
2141
+ end
2142
+ _tmp = apply(:_tok_identifier)
2143
+ unless _tmp
2144
+ self.pos = _save
2145
+ break
2146
+ end
2147
+ _tmp = match_string("{")
2148
+ unless _tmp
2149
+ self.pos = _save
2150
+ break
2151
+ end
2152
+ _tmp = apply(:_SenumDefList)
2153
+ unless _tmp
2154
+ self.pos = _save
2155
+ break
2156
+ end
2157
+ _tmp = match_string("}")
2158
+ unless _tmp
2159
+ self.pos = _save
2160
+ end
2161
+ break
2162
+ end # end sequence
2163
+
2164
+ set_failed_rule :_Senum unless _tmp
2165
+ return _tmp
2166
+ end
2167
+
2168
+ # SenumDefList = (SenumDefList SenumDef | nothing)
2169
+ def _SenumDefList
2170
+
2171
+ _save = self.pos
2172
+ while true # choice
2173
+
2174
+ _save1 = self.pos
2175
+ while true # sequence
2176
+ _tmp = apply(:_SenumDefList)
2177
+ unless _tmp
2178
+ self.pos = _save1
2179
+ break
2180
+ end
2181
+ _tmp = apply(:_SenumDef)
2182
+ unless _tmp
2183
+ self.pos = _save1
2184
+ end
2185
+ break
2186
+ end # end sequence
2187
+
2188
+ break if _tmp
2189
+ self.pos = _save
2190
+ _tmp = apply(:_nothing)
2191
+ break if _tmp
2192
+ self.pos = _save
2193
+ break
2194
+ end # end choice
2195
+
2196
+ set_failed_rule :_SenumDefList unless _tmp
2197
+ return _tmp
2198
+ end
2199
+
2200
+ # SenumDef = tok_literal CommaOrSemicolonOptional
2201
+ def _SenumDef
2202
+
2203
+ _save = self.pos
2204
+ while true # sequence
2205
+ _tmp = apply(:_tok_literal)
2206
+ unless _tmp
2207
+ self.pos = _save
2208
+ break
2209
+ end
2210
+ _tmp = apply(:_CommaOrSemicolonOptional)
2211
+ unless _tmp
2212
+ self.pos = _save
2213
+ end
2214
+ break
2215
+ end # end sequence
2216
+
2217
+ set_failed_rule :_SenumDef unless _tmp
2218
+ return _tmp
2219
+ end
2220
+
2221
+ # Const = "const" - FieldType tok_identifier "=" ConstValue CommaOrSemicolonOptional
2222
+ def _Const
2223
+
2224
+ _save = self.pos
2225
+ while true # sequence
2226
+ _tmp = match_string("const")
2227
+ unless _tmp
2228
+ self.pos = _save
2229
+ break
2230
+ end
2231
+ _tmp = apply(:__hyphen_)
2232
+ unless _tmp
2233
+ self.pos = _save
2234
+ break
2235
+ end
2236
+ _tmp = apply(:_FieldType)
2237
+ unless _tmp
2238
+ self.pos = _save
2239
+ break
2240
+ end
2241
+ _tmp = apply(:_tok_identifier)
2242
+ unless _tmp
2243
+ self.pos = _save
2244
+ break
2245
+ end
2246
+ _tmp = match_string("=")
2247
+ unless _tmp
2248
+ self.pos = _save
2249
+ break
2250
+ end
2251
+ _tmp = apply(:_ConstValue)
2252
+ unless _tmp
2253
+ self.pos = _save
2254
+ break
2255
+ end
2256
+ _tmp = apply(:_CommaOrSemicolonOptional)
2257
+ unless _tmp
2258
+ self.pos = _save
2259
+ end
2260
+ break
2261
+ end # end sequence
2262
+
2263
+ set_failed_rule :_Const unless _tmp
2264
+ return _tmp
2265
+ end
2266
+
2267
+ # ConstValue = (tok_int_constant:i {const_int(i)} | tok_literal:s {const_str(s)} | tok_identifier:i {const_id(i)} | ConstList | ConstMap | tok_dub_constant:d {const_dbl(d)})
2268
+ def _ConstValue
2269
+
2270
+ _save = self.pos
2271
+ while true # choice
2272
+
2273
+ _save1 = self.pos
2274
+ while true # sequence
2275
+ _tmp = apply(:_tok_int_constant)
2276
+ i = @result
2277
+ unless _tmp
2278
+ self.pos = _save1
2279
+ break
2280
+ end
2281
+ @result = begin; const_int(i); end
2282
+ _tmp = true
2283
+ unless _tmp
2284
+ self.pos = _save1
2285
+ end
2286
+ break
2287
+ end # end sequence
2288
+
2289
+ break if _tmp
2290
+ self.pos = _save
2291
+
2292
+ _save2 = self.pos
2293
+ while true # sequence
2294
+ _tmp = apply(:_tok_literal)
2295
+ s = @result
2296
+ unless _tmp
2297
+ self.pos = _save2
2298
+ break
2299
+ end
2300
+ @result = begin; const_str(s); end
2301
+ _tmp = true
2302
+ unless _tmp
2303
+ self.pos = _save2
2304
+ end
2305
+ break
2306
+ end # end sequence
2307
+
2308
+ break if _tmp
2309
+ self.pos = _save
2310
+
2311
+ _save3 = self.pos
2312
+ while true # sequence
2313
+ _tmp = apply(:_tok_identifier)
2314
+ i = @result
2315
+ unless _tmp
2316
+ self.pos = _save3
2317
+ break
2318
+ end
2319
+ @result = begin; const_id(i); end
2320
+ _tmp = true
2321
+ unless _tmp
2322
+ self.pos = _save3
2323
+ end
2324
+ break
2325
+ end # end sequence
2326
+
2327
+ break if _tmp
2328
+ self.pos = _save
2329
+ _tmp = apply(:_ConstList)
2330
+ break if _tmp
2331
+ self.pos = _save
2332
+ _tmp = apply(:_ConstMap)
2333
+ break if _tmp
2334
+ self.pos = _save
2335
+
2336
+ _save4 = self.pos
2337
+ while true # sequence
2338
+ _tmp = apply(:_tok_dub_constant)
2339
+ d = @result
2340
+ unless _tmp
2341
+ self.pos = _save4
2342
+ break
2343
+ end
2344
+ @result = begin; const_dbl(d); end
2345
+ _tmp = true
2346
+ unless _tmp
2347
+ self.pos = _save4
2348
+ end
2349
+ break
2350
+ end # end sequence
2351
+
2352
+ break if _tmp
2353
+ self.pos = _save
2354
+ break
2355
+ end # end choice
2356
+
2357
+ set_failed_rule :_ConstValue unless _tmp
2358
+ return _tmp
2359
+ end
2360
+
2361
+ # ConstList = "[" osp ConstListContents*:l osp "]" {const_list(l)}
2362
+ def _ConstList
2363
+
2364
+ _save = self.pos
2365
+ while true # sequence
2366
+ _tmp = match_string("[")
2367
+ unless _tmp
2368
+ self.pos = _save
2369
+ break
2370
+ end
2371
+ _tmp = apply(:_osp)
2372
+ unless _tmp
2373
+ self.pos = _save
2374
+ break
2375
+ end
2376
+ _ary = []
2377
+ while true
2378
+ _tmp = apply(:_ConstListContents)
2379
+ _ary << @result if _tmp
2380
+ break unless _tmp
2381
+ end
2382
+ _tmp = true
2383
+ @result = _ary
2384
+ l = @result
2385
+ unless _tmp
2386
+ self.pos = _save
2387
+ break
2388
+ end
2389
+ _tmp = apply(:_osp)
2390
+ unless _tmp
2391
+ self.pos = _save
2392
+ break
2393
+ end
2394
+ _tmp = match_string("]")
2395
+ unless _tmp
2396
+ self.pos = _save
2397
+ break
2398
+ end
2399
+ @result = begin; const_list(l); end
2400
+ _tmp = true
2401
+ unless _tmp
2402
+ self.pos = _save
2403
+ end
2404
+ break
2405
+ end # end sequence
2406
+
2407
+ set_failed_rule :_ConstList unless _tmp
2408
+ return _tmp
2409
+ end
2410
+
2411
+ # ConstListContents = ConstValue:i CommaOrSemicolonOptional osp {i}
2412
+ def _ConstListContents
2413
+
2414
+ _save = self.pos
2415
+ while true # sequence
2416
+ _tmp = apply(:_ConstValue)
2417
+ i = @result
2418
+ unless _tmp
2419
+ self.pos = _save
2420
+ break
2421
+ end
2422
+ _tmp = apply(:_CommaOrSemicolonOptional)
2423
+ unless _tmp
2424
+ self.pos = _save
2425
+ break
2426
+ end
2427
+ _tmp = apply(:_osp)
2428
+ unless _tmp
2429
+ self.pos = _save
2430
+ break
2431
+ end
2432
+ @result = begin; i; end
2433
+ _tmp = true
2434
+ unless _tmp
2435
+ self.pos = _save
2436
+ end
2437
+ break
2438
+ end # end sequence
2439
+
2440
+ set_failed_rule :_ConstListContents unless _tmp
2441
+ return _tmp
2442
+ end
2443
+
2444
+ # ConstMap = "{" osp ConstMapContents*:m osp "}" {const_map(m)}
2445
+ def _ConstMap
2446
+
2447
+ _save = self.pos
2448
+ while true # sequence
2449
+ _tmp = match_string("{")
2450
+ unless _tmp
2451
+ self.pos = _save
2452
+ break
2453
+ end
2454
+ _tmp = apply(:_osp)
2455
+ unless _tmp
2456
+ self.pos = _save
2457
+ break
2458
+ end
2459
+ _ary = []
2460
+ while true
2461
+ _tmp = apply(:_ConstMapContents)
2462
+ _ary << @result if _tmp
2463
+ break unless _tmp
2464
+ end
2465
+ _tmp = true
2466
+ @result = _ary
2467
+ m = @result
2468
+ unless _tmp
2469
+ self.pos = _save
2470
+ break
2471
+ end
2472
+ _tmp = apply(:_osp)
2473
+ unless _tmp
2474
+ self.pos = _save
2475
+ break
2476
+ end
2477
+ _tmp = match_string("}")
2478
+ unless _tmp
2479
+ self.pos = _save
2480
+ break
2481
+ end
2482
+ @result = begin; const_map(m); end
2483
+ _tmp = true
2484
+ unless _tmp
2485
+ self.pos = _save
2486
+ end
2487
+ break
2488
+ end # end sequence
2489
+
2490
+ set_failed_rule :_ConstMap unless _tmp
2491
+ return _tmp
2492
+ end
2493
+
2494
+ # ConstMapContents = ConstValue:k osp ":" osp ConstValue:v CommaOrSemicolonOptional { [k,v] }
2495
+ def _ConstMapContents
2496
+
2497
+ _save = self.pos
2498
+ while true # sequence
2499
+ _tmp = apply(:_ConstValue)
2500
+ k = @result
2501
+ unless _tmp
2502
+ self.pos = _save
2503
+ break
2504
+ end
2505
+ _tmp = apply(:_osp)
2506
+ unless _tmp
2507
+ self.pos = _save
2508
+ break
2509
+ end
2510
+ _tmp = match_string(":")
2511
+ unless _tmp
2512
+ self.pos = _save
2513
+ break
2514
+ end
2515
+ _tmp = apply(:_osp)
2516
+ unless _tmp
2517
+ self.pos = _save
2518
+ break
2519
+ end
2520
+ _tmp = apply(:_ConstValue)
2521
+ v = @result
2522
+ unless _tmp
2523
+ self.pos = _save
2524
+ break
2525
+ end
2526
+ _tmp = apply(:_CommaOrSemicolonOptional)
2527
+ unless _tmp
2528
+ self.pos = _save
2529
+ break
2530
+ end
2531
+ @result = begin; [k,v] ; end
2532
+ _tmp = true
2533
+ unless _tmp
2534
+ self.pos = _save
2535
+ end
2536
+ break
2537
+ end # end sequence
2538
+
2539
+ set_failed_rule :_ConstMapContents unless _tmp
2540
+ return _tmp
2541
+ end
2542
+
2543
+ # StructHead = < ("struct" | "union") > {text}
2544
+ def _StructHead
2545
+
2546
+ _save = self.pos
2547
+ while true # sequence
2548
+ _text_start = self.pos
2549
+
2550
+ _save1 = self.pos
2551
+ while true # choice
2552
+ _tmp = match_string("struct")
2553
+ break if _tmp
2554
+ self.pos = _save1
2555
+ _tmp = match_string("union")
2556
+ break if _tmp
2557
+ self.pos = _save1
2558
+ break
2559
+ end # end choice
2560
+
2561
+ if _tmp
2562
+ text = get_text(_text_start)
2563
+ end
2564
+ unless _tmp
2565
+ self.pos = _save
2566
+ break
2567
+ end
2568
+ @result = begin; text; end
2569
+ _tmp = true
2570
+ unless _tmp
2571
+ self.pos = _save
2572
+ end
2573
+ break
2574
+ end # end sequence
2575
+
2576
+ set_failed_rule :_StructHead unless _tmp
2577
+ return _tmp
2578
+ end
2579
+
2580
+ # Struct = StructHead:t - tok_identifier:name - XsdAll? osp "{" obsp Comment? FieldList?:list obsp "}" {struct(t.to_sym,name,list)}
2581
+ def _Struct
2582
+
2583
+ _save = self.pos
2584
+ while true # sequence
2585
+ _tmp = apply(:_StructHead)
2586
+ t = @result
2587
+ unless _tmp
2588
+ self.pos = _save
2589
+ break
2590
+ end
2591
+ _tmp = apply(:__hyphen_)
2592
+ unless _tmp
2593
+ self.pos = _save
2594
+ break
2595
+ end
2596
+ _tmp = apply(:_tok_identifier)
2597
+ name = @result
2598
+ unless _tmp
2599
+ self.pos = _save
2600
+ break
2601
+ end
2602
+ _tmp = apply(:__hyphen_)
2603
+ unless _tmp
2604
+ self.pos = _save
2605
+ break
2606
+ end
2607
+ _save1 = self.pos
2608
+ _tmp = apply(:_XsdAll)
2609
+ unless _tmp
2610
+ _tmp = true
2611
+ self.pos = _save1
2612
+ end
2613
+ unless _tmp
2614
+ self.pos = _save
2615
+ break
2616
+ end
2617
+ _tmp = apply(:_osp)
2618
+ unless _tmp
2619
+ self.pos = _save
2620
+ break
2621
+ end
2622
+ _tmp = match_string("{")
2623
+ unless _tmp
2624
+ self.pos = _save
2625
+ break
2626
+ end
2627
+ _tmp = apply(:_obsp)
2628
+ unless _tmp
2629
+ self.pos = _save
2630
+ break
2631
+ end
2632
+ _save2 = self.pos
2633
+ _tmp = apply(:_Comment)
2634
+ unless _tmp
2635
+ _tmp = true
2636
+ self.pos = _save2
2637
+ end
2638
+ unless _tmp
2639
+ self.pos = _save
2640
+ break
2641
+ end
2642
+ _save3 = self.pos
2643
+ _tmp = apply(:_FieldList)
2644
+ @result = nil unless _tmp
2645
+ unless _tmp
2646
+ _tmp = true
2647
+ self.pos = _save3
2648
+ end
2649
+ list = @result
2650
+ unless _tmp
2651
+ self.pos = _save
2652
+ break
2653
+ end
2654
+ _tmp = apply(:_obsp)
2655
+ unless _tmp
2656
+ self.pos = _save
2657
+ break
2658
+ end
2659
+ _tmp = match_string("}")
2660
+ unless _tmp
2661
+ self.pos = _save
2662
+ break
2663
+ end
2664
+ @result = begin; struct(t.to_sym,name,list); end
2665
+ _tmp = true
2666
+ unless _tmp
2667
+ self.pos = _save
2668
+ end
2669
+ break
2670
+ end # end sequence
2671
+
2672
+ set_failed_rule :_Struct unless _tmp
2673
+ return _tmp
2674
+ end
2675
+
2676
+ # XsdAll = "xsd_all"
2677
+ def _XsdAll
2678
+ _tmp = match_string("xsd_all")
2679
+ set_failed_rule :_XsdAll unless _tmp
2680
+ return _tmp
2681
+ end
2682
+
2683
+ # XsdOptional = ("xsd_optional" - | nothing)
2684
+ def _XsdOptional
2685
+
2686
+ _save = self.pos
2687
+ while true # choice
2688
+
2689
+ _save1 = self.pos
2690
+ while true # sequence
2691
+ _tmp = match_string("xsd_optional")
2692
+ unless _tmp
2693
+ self.pos = _save1
2694
+ break
2695
+ end
2696
+ _tmp = apply(:__hyphen_)
2697
+ unless _tmp
2698
+ self.pos = _save1
2699
+ end
2700
+ break
2701
+ end # end sequence
2702
+
2703
+ break if _tmp
2704
+ self.pos = _save
2705
+ _tmp = apply(:_nothing)
2706
+ break if _tmp
2707
+ self.pos = _save
2708
+ break
2709
+ end # end choice
2710
+
2711
+ set_failed_rule :_XsdOptional unless _tmp
2712
+ return _tmp
2713
+ end
2714
+
2715
+ # XsdNillable = ("xsd_nillable" - | nothing)
2716
+ def _XsdNillable
2717
+
2718
+ _save = self.pos
2719
+ while true # choice
2720
+
2721
+ _save1 = self.pos
2722
+ while true # sequence
2723
+ _tmp = match_string("xsd_nillable")
2724
+ unless _tmp
2725
+ self.pos = _save1
2726
+ break
2727
+ end
2728
+ _tmp = apply(:__hyphen_)
2729
+ unless _tmp
2730
+ self.pos = _save1
2731
+ end
2732
+ break
2733
+ end # end sequence
2734
+
2735
+ break if _tmp
2736
+ self.pos = _save
2737
+ _tmp = apply(:_nothing)
2738
+ break if _tmp
2739
+ self.pos = _save
2740
+ break
2741
+ end # end choice
2742
+
2743
+ set_failed_rule :_XsdNillable unless _tmp
2744
+ return _tmp
2745
+ end
2746
+
2747
+ # XsdAttributes = ("xsd_attrs" - "{" FieldList "}" | nothing)
2748
+ def _XsdAttributes
2749
+
2750
+ _save = self.pos
2751
+ while true # choice
2752
+
2753
+ _save1 = self.pos
2754
+ while true # sequence
2755
+ _tmp = match_string("xsd_attrs")
2756
+ unless _tmp
2757
+ self.pos = _save1
2758
+ break
2759
+ end
2760
+ _tmp = apply(:__hyphen_)
2761
+ unless _tmp
2762
+ self.pos = _save1
2763
+ break
2764
+ end
2765
+ _tmp = match_string("{")
2766
+ unless _tmp
2767
+ self.pos = _save1
2768
+ break
2769
+ end
2770
+ _tmp = apply(:_FieldList)
2771
+ unless _tmp
2772
+ self.pos = _save1
2773
+ break
2774
+ end
2775
+ _tmp = match_string("}")
2776
+ unless _tmp
2777
+ self.pos = _save1
2778
+ end
2779
+ break
2780
+ end # end sequence
2781
+
2782
+ break if _tmp
2783
+ self.pos = _save
2784
+ _tmp = apply(:_nothing)
2785
+ break if _tmp
2786
+ self.pos = _save
2787
+ break
2788
+ end # end choice
2789
+
2790
+ set_failed_rule :_XsdAttributes unless _tmp
2791
+ return _tmp
2792
+ end
2793
+
2794
+ # Xception = "exception" - tok_identifier:name osp "{" obsp FieldList?:list obsp "}" {exception(name, list)}
2795
+ def _Xception
2796
+
2797
+ _save = self.pos
2798
+ while true # sequence
2799
+ _tmp = match_string("exception")
2800
+ unless _tmp
2801
+ self.pos = _save
2802
+ break
2803
+ end
2804
+ _tmp = apply(:__hyphen_)
2805
+ unless _tmp
2806
+ self.pos = _save
2807
+ break
2808
+ end
2809
+ _tmp = apply(:_tok_identifier)
2810
+ name = @result
2811
+ unless _tmp
2812
+ self.pos = _save
2813
+ break
2814
+ end
2815
+ _tmp = apply(:_osp)
2816
+ unless _tmp
2817
+ self.pos = _save
2818
+ break
2819
+ end
2820
+ _tmp = match_string("{")
2821
+ unless _tmp
2822
+ self.pos = _save
2823
+ break
2824
+ end
2825
+ _tmp = apply(:_obsp)
2826
+ unless _tmp
2827
+ self.pos = _save
2828
+ break
2829
+ end
2830
+ _save1 = self.pos
2831
+ _tmp = apply(:_FieldList)
2832
+ @result = nil unless _tmp
2833
+ unless _tmp
2834
+ _tmp = true
2835
+ self.pos = _save1
2836
+ end
2837
+ list = @result
2838
+ unless _tmp
2839
+ self.pos = _save
2840
+ break
2841
+ end
2842
+ _tmp = apply(:_obsp)
2843
+ unless _tmp
2844
+ self.pos = _save
2845
+ break
2846
+ end
2847
+ _tmp = match_string("}")
2848
+ unless _tmp
2849
+ self.pos = _save
2850
+ break
2851
+ end
2852
+ @result = begin; exception(name, list); end
2853
+ _tmp = true
2854
+ unless _tmp
2855
+ self.pos = _save
2856
+ end
2857
+ break
2858
+ end # end sequence
2859
+
2860
+ set_failed_rule :_Xception unless _tmp
2861
+ return _tmp
2862
+ end
2863
+
2864
+ # Service = "service" - tok_identifier:name - Extends? osp "{" obsp FunctionList?:funcs obsp "}" {service(name, funcs)}
2865
+ def _Service
2866
+
2867
+ _save = self.pos
2868
+ while true # sequence
2869
+ _tmp = match_string("service")
2870
+ unless _tmp
2871
+ self.pos = _save
2872
+ break
2873
+ end
2874
+ _tmp = apply(:__hyphen_)
2875
+ unless _tmp
2876
+ self.pos = _save
2877
+ break
2878
+ end
2879
+ _tmp = apply(:_tok_identifier)
2880
+ name = @result
2881
+ unless _tmp
2882
+ self.pos = _save
2883
+ break
2884
+ end
2885
+ _tmp = apply(:__hyphen_)
2886
+ unless _tmp
2887
+ self.pos = _save
2888
+ break
2889
+ end
2890
+ _save1 = self.pos
2891
+ _tmp = apply(:_Extends)
2892
+ unless _tmp
2893
+ _tmp = true
2894
+ self.pos = _save1
2895
+ end
2896
+ unless _tmp
2897
+ self.pos = _save
2898
+ break
2899
+ end
2900
+ _tmp = apply(:_osp)
2901
+ unless _tmp
2902
+ self.pos = _save
2903
+ break
2904
+ end
2905
+ _tmp = match_string("{")
2906
+ unless _tmp
2907
+ self.pos = _save
2908
+ break
2909
+ end
2910
+ _tmp = apply(:_obsp)
2911
+ unless _tmp
2912
+ self.pos = _save
2913
+ break
2914
+ end
2915
+ _save2 = self.pos
2916
+ _tmp = apply(:_FunctionList)
2917
+ @result = nil unless _tmp
2918
+ unless _tmp
2919
+ _tmp = true
2920
+ self.pos = _save2
2921
+ end
2922
+ funcs = @result
2923
+ unless _tmp
2924
+ self.pos = _save
2925
+ break
2926
+ end
2927
+ _tmp = apply(:_obsp)
2928
+ unless _tmp
2929
+ self.pos = _save
2930
+ break
2931
+ end
2932
+ _tmp = match_string("}")
2933
+ unless _tmp
2934
+ self.pos = _save
2935
+ break
2936
+ end
2937
+ @result = begin; service(name, funcs); end
2938
+ _tmp = true
2939
+ unless _tmp
2940
+ self.pos = _save
2941
+ end
2942
+ break
2943
+ end # end sequence
2944
+
2945
+ set_failed_rule :_Service unless _tmp
2946
+ return _tmp
2947
+ end
2948
+
2949
+ # Extends = "extends" - tok_identifier
2950
+ def _Extends
2951
+
2952
+ _save = self.pos
2953
+ while true # sequence
2954
+ _tmp = match_string("extends")
2955
+ unless _tmp
2956
+ self.pos = _save
2957
+ break
2958
+ end
2959
+ _tmp = apply(:__hyphen_)
2960
+ unless _tmp
2961
+ self.pos = _save
2962
+ break
2963
+ end
2964
+ _tmp = apply(:_tok_identifier)
2965
+ unless _tmp
2966
+ self.pos = _save
2967
+ end
2968
+ break
2969
+ end # end sequence
2970
+
2971
+ set_failed_rule :_Extends unless _tmp
2972
+ return _tmp
2973
+ end
2974
+
2975
+ # FunctionList = (FunctionList:l Function:f { l + [f] } | Function:f { [f] })
2976
+ def _FunctionList
2977
+
2978
+ _save = self.pos
2979
+ while true # choice
2980
+
2981
+ _save1 = self.pos
2982
+ while true # sequence
2983
+ _tmp = apply(:_FunctionList)
2984
+ l = @result
2985
+ unless _tmp
2986
+ self.pos = _save1
2987
+ break
2988
+ end
2989
+ _tmp = apply(:_Function)
2990
+ f = @result
2991
+ unless _tmp
2992
+ self.pos = _save1
2993
+ break
2994
+ end
2995
+ @result = begin; l + [f] ; end
2996
+ _tmp = true
2997
+ unless _tmp
2998
+ self.pos = _save1
2999
+ end
3000
+ break
3001
+ end # end sequence
3002
+
3003
+ break if _tmp
3004
+ self.pos = _save
3005
+
3006
+ _save2 = self.pos
3007
+ while true # sequence
3008
+ _tmp = apply(:_Function)
3009
+ f = @result
3010
+ unless _tmp
3011
+ self.pos = _save2
3012
+ break
3013
+ end
3014
+ @result = begin; [f] ; end
3015
+ _tmp = true
3016
+ unless _tmp
3017
+ self.pos = _save2
3018
+ end
3019
+ break
3020
+ end # end sequence
3021
+
3022
+ break if _tmp
3023
+ self.pos = _save
3024
+ break
3025
+ end # end choice
3026
+
3027
+ set_failed_rule :_FunctionList unless _tmp
3028
+ return _tmp
3029
+ end
3030
+
3031
+ # Function = CaptureDocText OneWay? FunctionType:rt - tok_identifier:name osp "(" FieldList?:args ")" Throws? CommaOrSemicolonOptional {function(name, rt, args)}
3032
+ def _Function
3033
+
3034
+ _save = self.pos
3035
+ while true # sequence
3036
+ _tmp = apply(:_CaptureDocText)
3037
+ unless _tmp
3038
+ self.pos = _save
3039
+ break
3040
+ end
3041
+ _save1 = self.pos
3042
+ _tmp = apply(:_OneWay)
3043
+ unless _tmp
3044
+ _tmp = true
3045
+ self.pos = _save1
3046
+ end
3047
+ unless _tmp
3048
+ self.pos = _save
3049
+ break
3050
+ end
3051
+ _tmp = apply(:_FunctionType)
3052
+ rt = @result
3053
+ unless _tmp
3054
+ self.pos = _save
3055
+ break
3056
+ end
3057
+ _tmp = apply(:__hyphen_)
3058
+ unless _tmp
3059
+ self.pos = _save
3060
+ break
3061
+ end
3062
+ _tmp = apply(:_tok_identifier)
3063
+ name = @result
3064
+ unless _tmp
3065
+ self.pos = _save
3066
+ break
3067
+ end
3068
+ _tmp = apply(:_osp)
3069
+ unless _tmp
3070
+ self.pos = _save
3071
+ break
3072
+ end
3073
+ _tmp = match_string("(")
3074
+ unless _tmp
3075
+ self.pos = _save
3076
+ break
3077
+ end
3078
+ _save2 = self.pos
3079
+ _tmp = apply(:_FieldList)
3080
+ @result = nil unless _tmp
3081
+ unless _tmp
3082
+ _tmp = true
3083
+ self.pos = _save2
3084
+ end
3085
+ args = @result
3086
+ unless _tmp
3087
+ self.pos = _save
3088
+ break
3089
+ end
3090
+ _tmp = match_string(")")
3091
+ unless _tmp
3092
+ self.pos = _save
3093
+ break
3094
+ end
3095
+ _save3 = self.pos
3096
+ _tmp = apply(:_Throws)
3097
+ unless _tmp
3098
+ _tmp = true
3099
+ self.pos = _save3
3100
+ end
3101
+ unless _tmp
3102
+ self.pos = _save
3103
+ break
3104
+ end
3105
+ _tmp = apply(:_CommaOrSemicolonOptional)
3106
+ unless _tmp
3107
+ self.pos = _save
3108
+ break
3109
+ end
3110
+ @result = begin; function(name, rt, args); end
3111
+ _tmp = true
3112
+ unless _tmp
3113
+ self.pos = _save
3114
+ end
3115
+ break
3116
+ end # end sequence
3117
+
3118
+ set_failed_rule :_Function unless _tmp
3119
+ return _tmp
3120
+ end
3121
+
3122
+ # OneWay = ("oneway" | "async") -
3123
+ def _OneWay
3124
+
3125
+ _save = self.pos
3126
+ while true # sequence
3127
+
3128
+ _save1 = self.pos
3129
+ while true # choice
3130
+ _tmp = match_string("oneway")
3131
+ break if _tmp
3132
+ self.pos = _save1
3133
+ _tmp = match_string("async")
3134
+ break if _tmp
3135
+ self.pos = _save1
3136
+ break
3137
+ end # end choice
3138
+
3139
+ unless _tmp
3140
+ self.pos = _save
3141
+ break
3142
+ end
3143
+ _tmp = apply(:__hyphen_)
3144
+ unless _tmp
3145
+ self.pos = _save
3146
+ end
3147
+ break
3148
+ end # end sequence
3149
+
3150
+ set_failed_rule :_OneWay unless _tmp
3151
+ return _tmp
3152
+ end
3153
+
3154
+ # Throws = "throws" - "(" FieldList ")"
3155
+ def _Throws
3156
+
3157
+ _save = self.pos
3158
+ while true # sequence
3159
+ _tmp = match_string("throws")
3160
+ unless _tmp
3161
+ self.pos = _save
3162
+ break
3163
+ end
3164
+ _tmp = apply(:__hyphen_)
3165
+ unless _tmp
3166
+ self.pos = _save
3167
+ break
3168
+ end
3169
+ _tmp = match_string("(")
3170
+ unless _tmp
3171
+ self.pos = _save
3172
+ break
3173
+ end
3174
+ _tmp = apply(:_FieldList)
3175
+ unless _tmp
3176
+ self.pos = _save
3177
+ break
3178
+ end
3179
+ _tmp = match_string(")")
3180
+ unless _tmp
3181
+ self.pos = _save
3182
+ end
3183
+ break
3184
+ end # end sequence
3185
+
3186
+ set_failed_rule :_Throws unless _tmp
3187
+ return _tmp
3188
+ end
3189
+
3190
+ # FieldList = (FieldList:l Field:f { l + [f] } | Field:f { [f] })
3191
+ def _FieldList
3192
+
3193
+ _save = self.pos
3194
+ while true # choice
3195
+
3196
+ _save1 = self.pos
3197
+ while true # sequence
3198
+ _tmp = apply(:_FieldList)
3199
+ l = @result
3200
+ unless _tmp
3201
+ self.pos = _save1
3202
+ break
3203
+ end
3204
+ _tmp = apply(:_Field)
3205
+ f = @result
3206
+ unless _tmp
3207
+ self.pos = _save1
3208
+ break
3209
+ end
3210
+ @result = begin; l + [f] ; end
3211
+ _tmp = true
3212
+ unless _tmp
3213
+ self.pos = _save1
3214
+ end
3215
+ break
3216
+ end # end sequence
3217
+
3218
+ break if _tmp
3219
+ self.pos = _save
3220
+
3221
+ _save2 = self.pos
3222
+ while true # sequence
3223
+ _tmp = apply(:_Field)
3224
+ f = @result
3225
+ unless _tmp
3226
+ self.pos = _save2
3227
+ break
3228
+ end
3229
+ @result = begin; [f] ; end
3230
+ _tmp = true
3231
+ unless _tmp
3232
+ self.pos = _save2
3233
+ end
3234
+ break
3235
+ end # end sequence
3236
+
3237
+ break if _tmp
3238
+ self.pos = _save
3239
+ break
3240
+ end # end choice
3241
+
3242
+ set_failed_rule :_FieldList unless _tmp
3243
+ return _tmp
3244
+ end
3245
+
3246
+ # Field = CaptureDocText FieldIdentifier?:i osp FieldRequiredness?:req osp FieldType:t osp tok_identifier:n osp FieldValue?:val CommaOrSemicolonOptional {field(i,t,n,val,req)}
3247
+ def _Field
3248
+
3249
+ _save = self.pos
3250
+ while true # sequence
3251
+ _tmp = apply(:_CaptureDocText)
3252
+ unless _tmp
3253
+ self.pos = _save
3254
+ break
3255
+ end
3256
+ _save1 = self.pos
3257
+ _tmp = apply(:_FieldIdentifier)
3258
+ @result = nil unless _tmp
3259
+ unless _tmp
3260
+ _tmp = true
3261
+ self.pos = _save1
3262
+ end
3263
+ i = @result
3264
+ unless _tmp
3265
+ self.pos = _save
3266
+ break
3267
+ end
3268
+ _tmp = apply(:_osp)
3269
+ unless _tmp
3270
+ self.pos = _save
3271
+ break
3272
+ end
3273
+ _save2 = self.pos
3274
+ _tmp = apply(:_FieldRequiredness)
3275
+ @result = nil unless _tmp
3276
+ unless _tmp
3277
+ _tmp = true
3278
+ self.pos = _save2
3279
+ end
3280
+ req = @result
3281
+ unless _tmp
3282
+ self.pos = _save
3283
+ break
3284
+ end
3285
+ _tmp = apply(:_osp)
3286
+ unless _tmp
3287
+ self.pos = _save
3288
+ break
3289
+ end
3290
+ _tmp = apply(:_FieldType)
3291
+ t = @result
3292
+ unless _tmp
3293
+ self.pos = _save
3294
+ break
3295
+ end
3296
+ _tmp = apply(:_osp)
3297
+ unless _tmp
3298
+ self.pos = _save
3299
+ break
3300
+ end
3301
+ _tmp = apply(:_tok_identifier)
3302
+ n = @result
3303
+ unless _tmp
3304
+ self.pos = _save
3305
+ break
3306
+ end
3307
+ _tmp = apply(:_osp)
3308
+ unless _tmp
3309
+ self.pos = _save
3310
+ break
3311
+ end
3312
+ _save3 = self.pos
3313
+ _tmp = apply(:_FieldValue)
3314
+ @result = nil unless _tmp
3315
+ unless _tmp
3316
+ _tmp = true
3317
+ self.pos = _save3
3318
+ end
3319
+ val = @result
3320
+ unless _tmp
3321
+ self.pos = _save
3322
+ break
3323
+ end
3324
+ _tmp = apply(:_CommaOrSemicolonOptional)
3325
+ unless _tmp
3326
+ self.pos = _save
3327
+ break
3328
+ end
3329
+ @result = begin; field(i,t,n,val,req); end
3330
+ _tmp = true
3331
+ unless _tmp
3332
+ self.pos = _save
3333
+ end
3334
+ break
3335
+ end # end sequence
3336
+
3337
+ set_failed_rule :_Field unless _tmp
3338
+ return _tmp
3339
+ end
3340
+
3341
+ # FieldIdentifier = tok_int_constant:n ":" {n}
3342
+ def _FieldIdentifier
3343
+
3344
+ _save = self.pos
3345
+ while true # sequence
3346
+ _tmp = apply(:_tok_int_constant)
3347
+ n = @result
3348
+ unless _tmp
3349
+ self.pos = _save
3350
+ break
3351
+ end
3352
+ _tmp = match_string(":")
3353
+ unless _tmp
3354
+ self.pos = _save
3355
+ break
3356
+ end
3357
+ @result = begin; n; end
3358
+ _tmp = true
3359
+ unless _tmp
3360
+ self.pos = _save
3361
+ end
3362
+ break
3363
+ end # end sequence
3364
+
3365
+ set_failed_rule :_FieldIdentifier unless _tmp
3366
+ return _tmp
3367
+ end
3368
+
3369
+ # FieldRequiredness = < ("required" | "optional") > { [text] }
3370
+ def _FieldRequiredness
3371
+
3372
+ _save = self.pos
3373
+ while true # sequence
3374
+ _text_start = self.pos
3375
+
3376
+ _save1 = self.pos
3377
+ while true # choice
3378
+ _tmp = match_string("required")
3379
+ break if _tmp
3380
+ self.pos = _save1
3381
+ _tmp = match_string("optional")
3382
+ break if _tmp
3383
+ self.pos = _save1
3384
+ break
3385
+ end # end choice
3386
+
3387
+ if _tmp
3388
+ text = get_text(_text_start)
3389
+ end
3390
+ unless _tmp
3391
+ self.pos = _save
3392
+ break
3393
+ end
3394
+ @result = begin; [text] ; end
3395
+ _tmp = true
3396
+ unless _tmp
3397
+ self.pos = _save
3398
+ end
3399
+ break
3400
+ end # end sequence
3401
+
3402
+ set_failed_rule :_FieldRequiredness unless _tmp
3403
+ return _tmp
3404
+ end
3405
+
3406
+ # FieldValue = "=" osp ConstValue:e {e}
3407
+ def _FieldValue
3408
+
3409
+ _save = self.pos
3410
+ while true # sequence
3411
+ _tmp = match_string("=")
3412
+ unless _tmp
3413
+ self.pos = _save
3414
+ break
3415
+ end
3416
+ _tmp = apply(:_osp)
3417
+ unless _tmp
3418
+ self.pos = _save
3419
+ break
3420
+ end
3421
+ _tmp = apply(:_ConstValue)
3422
+ e = @result
3423
+ unless _tmp
3424
+ self.pos = _save
3425
+ break
3426
+ end
3427
+ @result = begin; e; end
3428
+ _tmp = true
3429
+ unless _tmp
3430
+ self.pos = _save
3431
+ end
3432
+ break
3433
+ end # end sequence
3434
+
3435
+ set_failed_rule :_FieldValue unless _tmp
3436
+ return _tmp
3437
+ end
3438
+
3439
+ # FunctionType = (FieldType | "void")
3440
+ def _FunctionType
3441
+
3442
+ _save = self.pos
3443
+ while true # choice
3444
+ _tmp = apply(:_FieldType)
3445
+ break if _tmp
3446
+ self.pos = _save
3447
+ _tmp = match_string("void")
3448
+ break if _tmp
3449
+ self.pos = _save
3450
+ break
3451
+ end # end choice
3452
+
3453
+ set_failed_rule :_FunctionType unless _tmp
3454
+ return _tmp
3455
+ end
3456
+
3457
+ # FieldType = (ContainerType | tok_identifier:n {n})
3458
+ def _FieldType
3459
+
3460
+ _save = self.pos
3461
+ while true # choice
3462
+ _tmp = apply(:_ContainerType)
3463
+ break if _tmp
3464
+ self.pos = _save
3465
+
3466
+ _save1 = self.pos
3467
+ while true # sequence
3468
+ _tmp = apply(:_tok_identifier)
3469
+ n = @result
3470
+ unless _tmp
3471
+ self.pos = _save1
3472
+ break
3473
+ end
3474
+ @result = begin; n; end
3475
+ _tmp = true
3476
+ unless _tmp
3477
+ self.pos = _save1
3478
+ end
3479
+ break
3480
+ end # end sequence
3481
+
3482
+ break if _tmp
3483
+ self.pos = _save
3484
+ break
3485
+ end # end choice
3486
+
3487
+ set_failed_rule :_FieldType unless _tmp
3488
+ return _tmp
3489
+ end
3490
+
3491
+ # BaseType = SimpleBaseType:t TypeAnnotations {t}
3492
+ def _BaseType
3493
+
3494
+ _save = self.pos
3495
+ while true # sequence
3496
+ _tmp = apply(:_SimpleBaseType)
3497
+ t = @result
3498
+ unless _tmp
3499
+ self.pos = _save
3500
+ break
3501
+ end
3502
+ _tmp = apply(:_TypeAnnotations)
3503
+ unless _tmp
3504
+ self.pos = _save
3505
+ break
3506
+ end
3507
+ @result = begin; t; end
3508
+ _tmp = true
3509
+ unless _tmp
3510
+ self.pos = _save
3511
+ end
3512
+ break
3513
+ end # end sequence
3514
+
3515
+ set_failed_rule :_BaseType unless _tmp
3516
+ return _tmp
3517
+ end
3518
+
3519
+ # SimpleBaseType = ("string" { :string } | "binary" { :binary } | "slist" { :slist } | "bool" { :bool } | "byte" { :byte } | "i16" { :i16 } | "i32" { :i32 } | "i64" { :i64 } | "double" { :double })
3520
+ def _SimpleBaseType
3521
+
3522
+ _save = self.pos
3523
+ while true # choice
3524
+
3525
+ _save1 = self.pos
3526
+ while true # sequence
3527
+ _tmp = match_string("string")
3528
+ unless _tmp
3529
+ self.pos = _save1
3530
+ break
3531
+ end
3532
+ @result = begin; :string ; end
3533
+ _tmp = true
3534
+ unless _tmp
3535
+ self.pos = _save1
3536
+ end
3537
+ break
3538
+ end # end sequence
3539
+
3540
+ break if _tmp
3541
+ self.pos = _save
3542
+
3543
+ _save2 = self.pos
3544
+ while true # sequence
3545
+ _tmp = match_string("binary")
3546
+ unless _tmp
3547
+ self.pos = _save2
3548
+ break
3549
+ end
3550
+ @result = begin; :binary ; end
3551
+ _tmp = true
3552
+ unless _tmp
3553
+ self.pos = _save2
3554
+ end
3555
+ break
3556
+ end # end sequence
3557
+
3558
+ break if _tmp
3559
+ self.pos = _save
3560
+
3561
+ _save3 = self.pos
3562
+ while true # sequence
3563
+ _tmp = match_string("slist")
3564
+ unless _tmp
3565
+ self.pos = _save3
3566
+ break
3567
+ end
3568
+ @result = begin; :slist ; end
3569
+ _tmp = true
3570
+ unless _tmp
3571
+ self.pos = _save3
3572
+ end
3573
+ break
3574
+ end # end sequence
3575
+
3576
+ break if _tmp
3577
+ self.pos = _save
3578
+
3579
+ _save4 = self.pos
3580
+ while true # sequence
3581
+ _tmp = match_string("bool")
3582
+ unless _tmp
3583
+ self.pos = _save4
3584
+ break
3585
+ end
3586
+ @result = begin; :bool ; end
3587
+ _tmp = true
3588
+ unless _tmp
3589
+ self.pos = _save4
3590
+ end
3591
+ break
3592
+ end # end sequence
3593
+
3594
+ break if _tmp
3595
+ self.pos = _save
3596
+
3597
+ _save5 = self.pos
3598
+ while true # sequence
3599
+ _tmp = match_string("byte")
3600
+ unless _tmp
3601
+ self.pos = _save5
3602
+ break
3603
+ end
3604
+ @result = begin; :byte ; end
3605
+ _tmp = true
3606
+ unless _tmp
3607
+ self.pos = _save5
3608
+ end
3609
+ break
3610
+ end # end sequence
3611
+
3612
+ break if _tmp
3613
+ self.pos = _save
3614
+
3615
+ _save6 = self.pos
3616
+ while true # sequence
3617
+ _tmp = match_string("i16")
3618
+ unless _tmp
3619
+ self.pos = _save6
3620
+ break
3621
+ end
3622
+ @result = begin; :i16 ; end
3623
+ _tmp = true
3624
+ unless _tmp
3625
+ self.pos = _save6
3626
+ end
3627
+ break
3628
+ end # end sequence
3629
+
3630
+ break if _tmp
3631
+ self.pos = _save
3632
+
3633
+ _save7 = self.pos
3634
+ while true # sequence
3635
+ _tmp = match_string("i32")
3636
+ unless _tmp
3637
+ self.pos = _save7
3638
+ break
3639
+ end
3640
+ @result = begin; :i32 ; end
3641
+ _tmp = true
3642
+ unless _tmp
3643
+ self.pos = _save7
3644
+ end
3645
+ break
3646
+ end # end sequence
3647
+
3648
+ break if _tmp
3649
+ self.pos = _save
3650
+
3651
+ _save8 = self.pos
3652
+ while true # sequence
3653
+ _tmp = match_string("i64")
3654
+ unless _tmp
3655
+ self.pos = _save8
3656
+ break
3657
+ end
3658
+ @result = begin; :i64 ; end
3659
+ _tmp = true
3660
+ unless _tmp
3661
+ self.pos = _save8
3662
+ end
3663
+ break
3664
+ end # end sequence
3665
+
3666
+ break if _tmp
3667
+ self.pos = _save
3668
+
3669
+ _save9 = self.pos
3670
+ while true # sequence
3671
+ _tmp = match_string("double")
3672
+ unless _tmp
3673
+ self.pos = _save9
3674
+ break
3675
+ end
3676
+ @result = begin; :double ; end
3677
+ _tmp = true
3678
+ unless _tmp
3679
+ self.pos = _save9
3680
+ end
3681
+ break
3682
+ end # end sequence
3683
+
3684
+ break if _tmp
3685
+ self.pos = _save
3686
+ break
3687
+ end # end choice
3688
+
3689
+ set_failed_rule :_SimpleBaseType unless _tmp
3690
+ return _tmp
3691
+ end
3692
+
3693
+ # ContainerType = SimpleContainerType
3694
+ def _ContainerType
3695
+ _tmp = apply(:_SimpleContainerType)
3696
+ set_failed_rule :_ContainerType unless _tmp
3697
+ return _tmp
3698
+ end
3699
+
3700
+ # SimpleContainerType = (MapType | SetType | ListType)
3701
+ def _SimpleContainerType
3702
+
3703
+ _save = self.pos
3704
+ while true # choice
3705
+ _tmp = apply(:_MapType)
3706
+ break if _tmp
3707
+ self.pos = _save
3708
+ _tmp = apply(:_SetType)
3709
+ break if _tmp
3710
+ self.pos = _save
3711
+ _tmp = apply(:_ListType)
3712
+ break if _tmp
3713
+ self.pos = _save
3714
+ break
3715
+ end # end choice
3716
+
3717
+ set_failed_rule :_SimpleContainerType unless _tmp
3718
+ return _tmp
3719
+ end
3720
+
3721
+ # MapType = "map" "<" FieldType:a osp "," osp FieldType:b ">" {map(a,b)}
3722
+ def _MapType
3723
+
3724
+ _save = self.pos
3725
+ while true # sequence
3726
+ _tmp = match_string("map")
3727
+ unless _tmp
3728
+ self.pos = _save
3729
+ break
3730
+ end
3731
+ _tmp = match_string("<")
3732
+ unless _tmp
3733
+ self.pos = _save
3734
+ break
3735
+ end
3736
+ _tmp = apply(:_FieldType)
3737
+ a = @result
3738
+ unless _tmp
3739
+ self.pos = _save
3740
+ break
3741
+ end
3742
+ _tmp = apply(:_osp)
3743
+ unless _tmp
3744
+ self.pos = _save
3745
+ break
3746
+ end
3747
+ _tmp = match_string(",")
3748
+ unless _tmp
3749
+ self.pos = _save
3750
+ break
3751
+ end
3752
+ _tmp = apply(:_osp)
3753
+ unless _tmp
3754
+ self.pos = _save
3755
+ break
3756
+ end
3757
+ _tmp = apply(:_FieldType)
3758
+ b = @result
3759
+ unless _tmp
3760
+ self.pos = _save
3761
+ break
3762
+ end
3763
+ _tmp = match_string(">")
3764
+ unless _tmp
3765
+ self.pos = _save
3766
+ break
3767
+ end
3768
+ @result = begin; map(a,b); end
3769
+ _tmp = true
3770
+ unless _tmp
3771
+ self.pos = _save
3772
+ end
3773
+ break
3774
+ end # end sequence
3775
+
3776
+ set_failed_rule :_MapType unless _tmp
3777
+ return _tmp
3778
+ end
3779
+
3780
+ # SetType = "set" "<" FieldType:a ">" {set(a)}
3781
+ def _SetType
3782
+
3783
+ _save = self.pos
3784
+ while true # sequence
3785
+ _tmp = match_string("set")
3786
+ unless _tmp
3787
+ self.pos = _save
3788
+ break
3789
+ end
3790
+ _tmp = match_string("<")
3791
+ unless _tmp
3792
+ self.pos = _save
3793
+ break
3794
+ end
3795
+ _tmp = apply(:_FieldType)
3796
+ a = @result
3797
+ unless _tmp
3798
+ self.pos = _save
3799
+ break
3800
+ end
3801
+ _tmp = match_string(">")
3802
+ unless _tmp
3803
+ self.pos = _save
3804
+ break
3805
+ end
3806
+ @result = begin; set(a); end
3807
+ _tmp = true
3808
+ unless _tmp
3809
+ self.pos = _save
3810
+ end
3811
+ break
3812
+ end # end sequence
3813
+
3814
+ set_failed_rule :_SetType unless _tmp
3815
+ return _tmp
3816
+ end
3817
+
3818
+ # ListType = "list" "<" FieldType:a ">" {list(a)}
3819
+ def _ListType
3820
+
3821
+ _save = self.pos
3822
+ while true # sequence
3823
+ _tmp = match_string("list")
3824
+ unless _tmp
3825
+ self.pos = _save
3826
+ break
3827
+ end
3828
+ _tmp = match_string("<")
3829
+ unless _tmp
3830
+ self.pos = _save
3831
+ break
3832
+ end
3833
+ _tmp = apply(:_FieldType)
3834
+ a = @result
3835
+ unless _tmp
3836
+ self.pos = _save
3837
+ break
3838
+ end
3839
+ _tmp = match_string(">")
3840
+ unless _tmp
3841
+ self.pos = _save
3842
+ break
3843
+ end
3844
+ @result = begin; list(a); end
3845
+ _tmp = true
3846
+ unless _tmp
3847
+ self.pos = _save
3848
+ end
3849
+ break
3850
+ end # end sequence
3851
+
3852
+ set_failed_rule :_ListType unless _tmp
3853
+ return _tmp
3854
+ end
3855
+
3856
+ # CppType = (tok_cpp_type tok_literal | nothing)
3857
+ def _CppType
3858
+
3859
+ _save = self.pos
3860
+ while true # choice
3861
+
3862
+ _save1 = self.pos
3863
+ while true # sequence
3864
+ _tmp = apply(:_tok_cpp_type)
3865
+ unless _tmp
3866
+ self.pos = _save1
3867
+ break
3868
+ end
3869
+ _tmp = apply(:_tok_literal)
3870
+ unless _tmp
3871
+ self.pos = _save1
3872
+ end
3873
+ break
3874
+ end # end sequence
3875
+
3876
+ break if _tmp
3877
+ self.pos = _save
3878
+ _tmp = apply(:_nothing)
3879
+ break if _tmp
3880
+ self.pos = _save
3881
+ break
3882
+ end # end choice
3883
+
3884
+ set_failed_rule :_CppType unless _tmp
3885
+ return _tmp
3886
+ end
3887
+
3888
+ # TypeAnnotationList = TypeAnnotationList TypeAnnotation
3889
+ def _TypeAnnotationList
3890
+
3891
+ _save = self.pos
3892
+ while true # sequence
3893
+ _tmp = apply(:_TypeAnnotationList)
3894
+ unless _tmp
3895
+ self.pos = _save
3896
+ break
3897
+ end
3898
+ _tmp = apply(:_TypeAnnotation)
3899
+ unless _tmp
3900
+ self.pos = _save
3901
+ end
3902
+ break
3903
+ end # end sequence
3904
+
3905
+ set_failed_rule :_TypeAnnotationList unless _tmp
3906
+ return _tmp
3907
+ end
3908
+
3909
+ # TypeAnnotation = tok_identifier "=" tok_literal CommaOrSemicolonOptional
3910
+ def _TypeAnnotation
3911
+
3912
+ _save = self.pos
3913
+ while true # sequence
3914
+ _tmp = apply(:_tok_identifier)
3915
+ unless _tmp
3916
+ self.pos = _save
3917
+ break
3918
+ end
3919
+ _tmp = match_string("=")
3920
+ unless _tmp
3921
+ self.pos = _save
3922
+ break
3923
+ end
3924
+ _tmp = apply(:_tok_literal)
3925
+ unless _tmp
3926
+ self.pos = _save
3927
+ break
3928
+ end
3929
+ _tmp = apply(:_CommaOrSemicolonOptional)
3930
+ unless _tmp
3931
+ self.pos = _save
3932
+ end
3933
+ break
3934
+ end # end sequence
3935
+
3936
+ set_failed_rule :_TypeAnnotation unless _tmp
3937
+ return _tmp
3938
+ end
3939
+
3940
+ Rules = {}
3941
+ Rules[:_intconstant] = rule_info("intconstant", "/([+-]?[0-9]+)/")
3942
+ Rules[:_hexconstant] = rule_info("hexconstant", "/(\"0x\"[0-9A-Fa-f]+)/")
3943
+ Rules[:_dubconstant] = rule_info("dubconstant", "(/([+-]?[0-9]+(\\.[0-9]+)([eE][+-]?[0-9]+)?)/ | /([+-]?[0-9]+([eE][+-]?[0-9]+))/ | /([+-]?(\\.[0-9]+)([eE][+-]?[0-9]+)?)/)")
3944
+ Rules[:_identifier] = rule_info("identifier", "/([a-zA-Z_][\\.a-zA-Z_0-9]*)/")
3945
+ Rules[:_whitespace] = rule_info("whitespace", "/([ \\t\\r\\n]*)/")
3946
+ Rules[:_st_identifier] = rule_info("st_identifier", "/([a-zA-Z-][\\.a-zA-Z_0-9-]*)/")
3947
+ Rules[:_literal_begin] = rule_info("literal_begin", "/(['\\\"])/")
3948
+ Rules[:_reserved] = rule_info("reserved", "(\"BEGIN\" | \"END\" | \"__CLASS__\" | \"__DIR__\" | \"__FILE__\" | \"__FUNCTION__\" | \"__LINE__\" | \"__METHOD__\" | \"__NAMESPACE__\" | \"abstract\" | \"alias\" | \"and\" | \"args\" | \"as\" | \"assert\" | \"begin\" | \"break\" | \"case\" | \"catch\" | \"class\" | \"clone\" | \"continue\" | \"declare\" | \"def\" | \"default\" | \"del\" | \"delete\" | \"do\" | \"dynamic\" | \"elif\" | \"else\" | \"elseif\" | \"elsif\" | \"end\" | \"enddeclare\" | \"endfor\" | \"endforeach\" | \"endif\" | \"endswitch\" | \"endwhile\" | \"ensure\" | \"except\" | \"exec\" | \"finally\" | \"float\" | \"for\" | \"foreach\" | \"function\" | \"global\" | \"goto\" | \"if\" | \"implements\" | \"import\" | \"in\" | \"inline\" | \"instanceof\" | \"interface\" | \"is\" | \"lambda\" | \"module\" | \"native\" | \"new\" | \"next\" | \"nil\" | \"not\" | \"or\" | \"pass\" | \"public\" | \"print\" | \"private\" | \"protected\" | \"public\" | \"raise\" | \"redo\" | \"rescue\" | \"retry\" | \"register\" | \"return\" | \"self\" | \"sizeof\" | \"static\" | \"super\" | \"switch\" | \"synchronized\" | \"then\" | \"this\" | \"throw\" | \"transient\" | \"try\" | \"undef\" | \"union\" | \"unless\" | \"unsigned\" | \"until\" | \"use\" | \"var\" | \"virtual\" | \"volatile\" | \"when\" | \"while\" | \"with\" | \"xor\" | \"yield\")")
3949
+ Rules[:_tok_int_constant] = rule_info("tok_int_constant", "(< intconstant > { text.to_i } | < hexconstant > { text.to_i } | \"false\" { 0 } | \"true\" { 1 })")
3950
+ Rules[:_tok_dub_constant] = rule_info("tok_dub_constant", "dubconstant:f { f.to_f }")
3951
+ Rules[:_tok_identifier] = rule_info("tok_identifier", "< identifier > {text}")
3952
+ Rules[:_tok_st_identifier] = rule_info("tok_st_identifier", "st_identifier")
3953
+ Rules[:_escapes] = rule_info("escapes", "(\"\\\\r\" { \"\\r\" } | \"\\\\n\" { \"\\n\" } | \"\\\\t\" { \"\\t\" } | \"\\\\\\\"\" { \"\\\"\" } | \"\\\\'\" { \"'\" } | \"\\\\\\\\\" { \"\\\\\" })")
3954
+ Rules[:_tok_literal] = rule_info("tok_literal", "(\"\\\"\" < (escapes | !\"\\\"\" .)* > \"\\\"\" {text} | \"'\" < (escapes | !\"'\" .)* > \"'\" {text})")
3955
+ Rules[:__hyphen_] = rule_info("-", "/[ \\t]+/")
3956
+ Rules[:_osp] = rule_info("osp", "/[ \\t]*/")
3957
+ Rules[:_bsp] = rule_info("bsp", "/[\\s]+/")
3958
+ Rules[:_obsp] = rule_info("obsp", "/[\\s]*/")
3959
+ Rules[:_root] = rule_info("root", "Program !.")
3960
+ Rules[:_Program] = rule_info("Program", "Element*:a { a }")
3961
+ Rules[:_CComment] = rule_info("CComment", "\"/*\" < (!\"*/\" .)* > \"*/\" obsp {comment(text)}")
3962
+ Rules[:_HComment] = rule_info("HComment", "\"\#\" < (!\"\\n\" .)* > bsp {comment(text)}")
3963
+ Rules[:_Comment] = rule_info("Comment", "(CComment | HComment)")
3964
+ Rules[:_CaptureDocText] = rule_info("CaptureDocText", "{}")
3965
+ Rules[:_DestroyDocText] = rule_info("DestroyDocText", "{}")
3966
+ Rules[:_HeaderList] = rule_info("HeaderList", "(HeaderList Header | Header)")
3967
+ Rules[:_Element] = rule_info("Element", "(Comment | Header bsp | Definition bsp)")
3968
+ Rules[:_Header] = rule_info("Header", "(Include | Namespace)")
3969
+ Rules[:_Namespace] = rule_info("Namespace", "(\"namespace\" - tok_identifier:l - tok_identifier:n {namespace(l,n)} | \"namespace\" - \"*\" - tok_identifier:n {namespace(nil,n)})")
3970
+ Rules[:_Include] = rule_info("Include", "\"include\" - tok_literal:f {include(f)}")
3971
+ Rules[:_DefinitionList] = rule_info("DefinitionList", "DefinitionList CaptureDocText Definition")
3972
+ Rules[:_Definition] = rule_info("Definition", "(Const | TypeDefinition | Service)")
3973
+ Rules[:_TypeDefinition] = rule_info("TypeDefinition", "(Typedef | Enum | Senum | Struct | Xception)")
3974
+ Rules[:_Typedef] = rule_info("Typedef", "\"typedef\" - FieldType tok_identifier")
3975
+ Rules[:_CommaOrSemicolonOptional] = rule_info("CommaOrSemicolonOptional", "(\",\" | \";\")? obsp")
3976
+ Rules[:_Enum] = rule_info("Enum", "\"enum\" - tok_identifier:name osp \"{\" obsp EnumDefList:vals obsp \"}\" {enum(name, vals)}")
3977
+ Rules[:_EnumDefList] = rule_info("EnumDefList", "(EnumDefList:l EnumDef:e { l + [e] } | EnumDef:e { [e] })")
3978
+ Rules[:_EnumDef] = rule_info("EnumDef", "(CaptureDocText tok_identifier \"=\" tok_int_constant CommaOrSemicolonOptional | CaptureDocText tok_identifier CommaOrSemicolonOptional)")
3979
+ Rules[:_Senum] = rule_info("Senum", "\"senum\" - tok_identifier \"{\" SenumDefList \"}\"")
3980
+ Rules[:_SenumDefList] = rule_info("SenumDefList", "(SenumDefList SenumDef | nothing)")
3981
+ Rules[:_SenumDef] = rule_info("SenumDef", "tok_literal CommaOrSemicolonOptional")
3982
+ Rules[:_Const] = rule_info("Const", "\"const\" - FieldType tok_identifier \"=\" ConstValue CommaOrSemicolonOptional")
3983
+ Rules[:_ConstValue] = rule_info("ConstValue", "(tok_int_constant:i {const_int(i)} | tok_literal:s {const_str(s)} | tok_identifier:i {const_id(i)} | ConstList | ConstMap | tok_dub_constant:d {const_dbl(d)})")
3984
+ Rules[:_ConstList] = rule_info("ConstList", "\"[\" osp ConstListContents*:l osp \"]\" {const_list(l)}")
3985
+ Rules[:_ConstListContents] = rule_info("ConstListContents", "ConstValue:i CommaOrSemicolonOptional osp {i}")
3986
+ Rules[:_ConstMap] = rule_info("ConstMap", "\"{\" osp ConstMapContents*:m osp \"}\" {const_map(m)}")
3987
+ Rules[:_ConstMapContents] = rule_info("ConstMapContents", "ConstValue:k osp \":\" osp ConstValue:v CommaOrSemicolonOptional { [k,v] }")
3988
+ Rules[:_StructHead] = rule_info("StructHead", "< (\"struct\" | \"union\") > {text}")
3989
+ Rules[:_Struct] = rule_info("Struct", "StructHead:t - tok_identifier:name - XsdAll? osp \"{\" obsp Comment? FieldList?:list obsp \"}\" {struct(t.to_sym,name,list)}")
3990
+ Rules[:_XsdAll] = rule_info("XsdAll", "\"xsd_all\"")
3991
+ Rules[:_XsdOptional] = rule_info("XsdOptional", "(\"xsd_optional\" - | nothing)")
3992
+ Rules[:_XsdNillable] = rule_info("XsdNillable", "(\"xsd_nillable\" - | nothing)")
3993
+ Rules[:_XsdAttributes] = rule_info("XsdAttributes", "(\"xsd_attrs\" - \"{\" FieldList \"}\" | nothing)")
3994
+ Rules[:_Xception] = rule_info("Xception", "\"exception\" - tok_identifier:name osp \"{\" obsp FieldList?:list obsp \"}\" {exception(name, list)}")
3995
+ Rules[:_Service] = rule_info("Service", "\"service\" - tok_identifier:name - Extends? osp \"{\" obsp FunctionList?:funcs obsp \"}\" {service(name, funcs)}")
3996
+ Rules[:_Extends] = rule_info("Extends", "\"extends\" - tok_identifier")
3997
+ Rules[:_FunctionList] = rule_info("FunctionList", "(FunctionList:l Function:f { l + [f] } | Function:f { [f] })")
3998
+ Rules[:_Function] = rule_info("Function", "CaptureDocText OneWay? FunctionType:rt - tok_identifier:name osp \"(\" FieldList?:args \")\" Throws? CommaOrSemicolonOptional {function(name, rt, args)}")
3999
+ Rules[:_OneWay] = rule_info("OneWay", "(\"oneway\" | \"async\") -")
4000
+ Rules[:_Throws] = rule_info("Throws", "\"throws\" - \"(\" FieldList \")\"")
4001
+ Rules[:_FieldList] = rule_info("FieldList", "(FieldList:l Field:f { l + [f] } | Field:f { [f] })")
4002
+ Rules[:_Field] = rule_info("Field", "CaptureDocText FieldIdentifier?:i osp FieldRequiredness?:req osp FieldType:t osp tok_identifier:n osp FieldValue?:val CommaOrSemicolonOptional {field(i,t,n,val,req)}")
4003
+ Rules[:_FieldIdentifier] = rule_info("FieldIdentifier", "tok_int_constant:n \":\" {n}")
4004
+ Rules[:_FieldRequiredness] = rule_info("FieldRequiredness", "< (\"required\" | \"optional\") > { [text] }")
4005
+ Rules[:_FieldValue] = rule_info("FieldValue", "\"=\" osp ConstValue:e {e}")
4006
+ Rules[:_FunctionType] = rule_info("FunctionType", "(FieldType | \"void\")")
4007
+ Rules[:_FieldType] = rule_info("FieldType", "(ContainerType | tok_identifier:n {n})")
4008
+ Rules[:_BaseType] = rule_info("BaseType", "SimpleBaseType:t TypeAnnotations {t}")
4009
+ Rules[:_SimpleBaseType] = rule_info("SimpleBaseType", "(\"string\" { :string } | \"binary\" { :binary } | \"slist\" { :slist } | \"bool\" { :bool } | \"byte\" { :byte } | \"i16\" { :i16 } | \"i32\" { :i32 } | \"i64\" { :i64 } | \"double\" { :double })")
4010
+ Rules[:_ContainerType] = rule_info("ContainerType", "SimpleContainerType")
4011
+ Rules[:_SimpleContainerType] = rule_info("SimpleContainerType", "(MapType | SetType | ListType)")
4012
+ Rules[:_MapType] = rule_info("MapType", "\"map\" \"<\" FieldType:a osp \",\" osp FieldType:b \">\" {map(a,b)}")
4013
+ Rules[:_SetType] = rule_info("SetType", "\"set\" \"<\" FieldType:a \">\" {set(a)}")
4014
+ Rules[:_ListType] = rule_info("ListType", "\"list\" \"<\" FieldType:a \">\" {list(a)}")
4015
+ Rules[:_CppType] = rule_info("CppType", "(tok_cpp_type tok_literal | nothing)")
4016
+ Rules[:_TypeAnnotationList] = rule_info("TypeAnnotationList", "TypeAnnotationList TypeAnnotation")
4017
+ Rules[:_TypeAnnotation] = rule_info("TypeAnnotation", "tok_identifier \"=\" tok_literal CommaOrSemicolonOptional")
4018
+ # :startdoc:
4019
+ end