stark 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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