rmasalov-surpass 0.1.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,1822 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # ExcelFormula.g
4
+ #
5
+ # Generated using ANTLR version: 3.2.1-SNAPSHOT Dec 18, 2009 04:29:28
6
+ # Ruby runtime library version: 1.3.1
7
+ # Input grammar file: ExcelFormula.g
8
+ # Generated at: 2010-06-13 10:19:27
9
+ #
10
+
11
+ # ~~~> start load path setup
12
+ this_directory = File.expand_path( File.dirname( __FILE__ ) )
13
+ $:.unshift( this_directory ) unless $:.include?( this_directory )
14
+
15
+ antlr_load_failed = proc do
16
+ load_path = $LOAD_PATH.map { |dir| ' - ' << dir }.join( $/ )
17
+ raise LoadError, <<-END.strip!
18
+
19
+ Failed to load the ANTLR3 runtime library (version 1.3.1):
20
+
21
+ Ensure the library has been installed on your system and is available
22
+ on the load path. If rubygems is available on your system, this can
23
+ be done with the command:
24
+
25
+ gem install antlr3
26
+
27
+ Current load path:
28
+ #{ load_path }
29
+
30
+ END
31
+ end
32
+
33
+ defined?(ANTLR3) or begin
34
+
35
+ # 1: try to load the ruby antlr3 runtime library from the system path
36
+ require 'antlr3'
37
+
38
+ rescue LoadError
39
+
40
+ # 2: try to load rubygems if it isn't already loaded
41
+ defined?(Gem) or begin
42
+ require 'rubygems'
43
+ rescue LoadError
44
+ antlr_load_failed.call
45
+ end
46
+
47
+ # 3: try to activate the antlr3 gem
48
+ begin
49
+ Gem.activate( 'antlr3', '= 1.3.1' )
50
+ rescue Gem::LoadError
51
+ antlr_load_failed.call
52
+ end
53
+
54
+ require 'antlr3'
55
+
56
+ end
57
+ # <~~~ end load path setup
58
+
59
+ # - - - - - - begin action @parser::header - - - - - -
60
+ # ExcelFormula.g
61
+
62
+
63
+ RVA_DELTA = {"R" => 0, "V" => 0x20, "A" => 0x40}
64
+ RVA_DELTA_REF = {"R" => 0, "V" => 0x20, "A" => 0x40, "D" => 0x20}
65
+ RVA_DELTA_AREA = {"R" => 0, "V" => 0x20, "A" => 0x40, "D" => 0}
66
+
67
+ # - - - - - - end action @parser::header - - - - - - -
68
+
69
+
70
+ module ExcelFormula
71
+ # TokenData defines all of the token type integer values
72
+ # as constants, which will be included in all
73
+ # ANTLR-generated recognizers.
74
+ const_defined?(:TokenData) or TokenData = ANTLR3::TokenScheme.new
75
+
76
+ module TokenData
77
+
78
+ # define the token constants
79
+ define_tokens(:GE => 8, :LT => 7, :NUM_CONST => 21, :PERCENT => 16,
80
+ :REF2D => 22, :CONCAT => 10, :RP => 25, :LP => 24, :INT_CONST => 20,
81
+ :STR_CONST => 19, :POWER => 15, :SUB => 12, :FUNC_CHOOSE => 30,
82
+ :SEMICOLON => 28, :BANG => 26, :TRUE_CONST => 17, :EOF => -1,
83
+ :MUL => 13, :ALPHA => 34, :COLON => 23, :NAME => 31, :FALSE_CONST => 18,
84
+ :WS => 35, :COMMA => 29, :GT => 6, :DIGIT => 33, :EQ => 4,
85
+ :DIV => 14, :FUNC_IF => 27, :QUOTENAME => 32, :LE => 9,
86
+ :NE => 5, :ADD => 11)
87
+
88
+ # register the proper human-readable name or literal value
89
+ # for each token type
90
+ #
91
+ # this is necessary because anonymous tokens, which are
92
+ # created from literal values in the grammar, do not
93
+ # have descriptive names
94
+ register_names("EQ", "NE", "GT", "LT", "GE", "LE", "CONCAT", "ADD",
95
+ "SUB", "MUL", "DIV", "POWER", "PERCENT", "TRUE_CONST",
96
+ "FALSE_CONST", "STR_CONST", "INT_CONST", "NUM_CONST",
97
+ "REF2D", "COLON", "LP", "RP", "BANG", "FUNC_IF", "SEMICOLON",
98
+ "COMMA", "FUNC_CHOOSE", "NAME", "QUOTENAME", "DIGIT",
99
+ "ALPHA", "WS")
100
+
101
+ end
102
+
103
+
104
+ class Parser < ANTLR3::Parser
105
+ @grammar_home = ExcelFormula
106
+
107
+ RULE_METHODS = [:formula, :expr, :prec0_expr, :prec1_expr, :prec2_expr,
108
+ :prec3_expr, :prec4_expr, :prec5_expr, :primary, :expr_list,
109
+ :sheet].freeze
110
+
111
+
112
+ include TokenData
113
+
114
+ generated_using( "ExcelFormula.g", "3.2.1-SNAPSHOT Dec 18, 2009 04:29:28", "1.3.1" )
115
+
116
+ def initialize(input, options = {})
117
+ super(input, options)
118
+
119
+ # - - - - - - begin action @parser::init - - - - - -
120
+ # ExcelFormula.g
121
+
122
+
123
+ @rpn = ''
124
+ @sheet_references = []
125
+ @xcall_references = []
126
+
127
+ # - - - - - - end action @parser::init - - - - - - -
128
+
129
+
130
+ end
131
+
132
+ attr_accessor :rpn
133
+
134
+ # - - - - - - - - - - - - Rules - - - - - - - - - - - - -
135
+
136
+ # parser rule formula
137
+ #
138
+ # (in ExcelFormula.g)
139
+ # 24:1: formula : expr[\"V\"] ;
140
+ def formula
141
+ # -> uncomment the next line to manually enable rule tracing
142
+ # trace_in(__method__, 1)
143
+
144
+ begin
145
+ # at line 25:7: expr[\"V\"]
146
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_formula_56)
147
+ expr("V")
148
+ @state.following.pop
149
+
150
+ rescue ANTLR3::Error::RecognitionError => re
151
+ report_error(re)
152
+ recover(re)
153
+
154
+ ensure
155
+ # -> uncomment the next line to manually enable rule tracing
156
+ # trace_out(__method__, 1)
157
+
158
+ end
159
+
160
+ return
161
+ end
162
+
163
+
164
+ # parser rule expr
165
+ #
166
+ # (in ExcelFormula.g)
167
+ # 28:1: expr[arg_type] : prec0_expr[arg_type] ( ( EQ | NE | GT | LT | GE | LE ) prec0_expr[arg_type] )* ;
168
+ def expr(arg_type)
169
+ # -> uncomment the next line to manually enable rule tracing
170
+ # trace_in(__method__, 2)
171
+
172
+ begin
173
+ # at line 29:7: prec0_expr[arg_type] ( ( EQ | NE | GT | LT | GE | LE ) prec0_expr[arg_type] )*
174
+ @state.following.push(TOKENS_FOLLOWING_prec0_expr_IN_expr_75)
175
+ prec0_expr(arg_type)
176
+ @state.following.pop
177
+ # at line 30:9: ( ( EQ | NE | GT | LT | GE | LE ) prec0_expr[arg_type] )*
178
+ loop do # decision 2
179
+ alt_2 = 2
180
+ alt_2 = @dfa2.predict(@input)
181
+ case alt_2
182
+ when 1
183
+ # at line 31:13: ( EQ | NE | GT | LT | GE | LE ) prec0_expr[arg_type]
184
+ # at line 31:13: ( EQ | NE | GT | LT | GE | LE )
185
+ alt_1 = 6
186
+ case look_1 = @input.peek(1)
187
+ when EQ then alt_1 = 1
188
+ when NE then alt_1 = 2
189
+ when GT then alt_1 = 3
190
+ when LT then alt_1 = 4
191
+ when GE then alt_1 = 5
192
+ when LE then alt_1 = 6
193
+ else
194
+ nvae = NoViableAlternative("", 1, 0)
195
+ raise nvae
196
+ end
197
+ case alt_1
198
+ when 1
199
+ # at line 32:19: EQ
200
+ match(EQ, TOKENS_FOLLOWING_EQ_IN_expr_120)
201
+ # --> action
202
+ op = [PTGEQ].pack('C')
203
+ # <-- action
204
+
205
+ when 2
206
+ # at line 33:19: NE
207
+ match(NE, TOKENS_FOLLOWING_NE_IN_expr_142)
208
+ # --> action
209
+ op = [PTGNE].pack('C')
210
+ # <-- action
211
+
212
+ when 3
213
+ # at line 34:19: GT
214
+ match(GT, TOKENS_FOLLOWING_GT_IN_expr_164)
215
+ # --> action
216
+ op = [PTGGT].pack('C')
217
+ # <-- action
218
+
219
+ when 4
220
+ # at line 35:19: LT
221
+ match(LT, TOKENS_FOLLOWING_LT_IN_expr_186)
222
+ # --> action
223
+ op = [PTGLT].pack('C')
224
+ # <-- action
225
+
226
+ when 5
227
+ # at line 36:19: GE
228
+ match(GE, TOKENS_FOLLOWING_GE_IN_expr_208)
229
+ # --> action
230
+ op = [PTGGE].pack('C')
231
+ # <-- action
232
+
233
+ when 6
234
+ # at line 37:19: LE
235
+ match(LE, TOKENS_FOLLOWING_LE_IN_expr_230)
236
+ # --> action
237
+ op = [PTGLE].pack('C')
238
+ # <-- action
239
+
240
+ end
241
+ @state.following.push(TOKENS_FOLLOWING_prec0_expr_IN_expr_261)
242
+ prec0_expr(arg_type)
243
+ @state.following.pop
244
+ # --> action
245
+ @rpn += op
246
+ # <-- action
247
+
248
+ else
249
+ break # out of loop for decision 2
250
+ end
251
+ end # loop for decision 2
252
+
253
+ rescue ANTLR3::Error::RecognitionError => re
254
+ report_error(re)
255
+ recover(re)
256
+
257
+ ensure
258
+ # -> uncomment the next line to manually enable rule tracing
259
+ # trace_out(__method__, 2)
260
+
261
+ end
262
+
263
+ return
264
+ end
265
+
266
+
267
+ # parser rule prec0_expr
268
+ #
269
+ # (in ExcelFormula.g)
270
+ # 44:1: prec0_expr[arg_type] : prec1_expr[arg_type] ( ( CONCAT ) prec1_expr[arg_type] )* ;
271
+ def prec0_expr(arg_type)
272
+ # -> uncomment the next line to manually enable rule tracing
273
+ # trace_in(__method__, 3)
274
+
275
+ begin
276
+ # at line 45:7: prec1_expr[arg_type] ( ( CONCAT ) prec1_expr[arg_type] )*
277
+ @state.following.push(TOKENS_FOLLOWING_prec1_expr_IN_prec0_expr_293)
278
+ prec1_expr(arg_type)
279
+ @state.following.pop
280
+ # at line 46:9: ( ( CONCAT ) prec1_expr[arg_type] )*
281
+ loop do # decision 3
282
+ alt_3 = 2
283
+ alt_3 = @dfa3.predict(@input)
284
+ case alt_3
285
+ when 1
286
+ # at line 47:13: ( CONCAT ) prec1_expr[arg_type]
287
+ # at line 47:13: ( CONCAT )
288
+ # at line 48:17: CONCAT
289
+ match(CONCAT, TOKENS_FOLLOWING_CONCAT_IN_prec0_expr_336)
290
+ # --> action
291
+ op = [PTGCONCAT].pack('C')
292
+ # <-- action
293
+
294
+ @state.following.push(TOKENS_FOLLOWING_prec1_expr_IN_prec0_expr_366)
295
+ prec1_expr(arg_type)
296
+ @state.following.pop
297
+ # --> action
298
+ @rpn += op
299
+ # <-- action
300
+
301
+ else
302
+ break # out of loop for decision 3
303
+ end
304
+ end # loop for decision 3
305
+
306
+ rescue ANTLR3::Error::RecognitionError => re
307
+ report_error(re)
308
+ recover(re)
309
+
310
+ ensure
311
+ # -> uncomment the next line to manually enable rule tracing
312
+ # trace_out(__method__, 3)
313
+
314
+ end
315
+
316
+ return
317
+ end
318
+
319
+
320
+ # parser rule prec1_expr
321
+ #
322
+ # (in ExcelFormula.g)
323
+ # 54:1: prec1_expr[arg_type] : prec2_expr[arg_type] ( ( ADD | SUB ) prec2_expr[arg_type] )* ;
324
+ def prec1_expr(arg_type)
325
+ # -> uncomment the next line to manually enable rule tracing
326
+ # trace_in(__method__, 4)
327
+
328
+ begin
329
+ # at line 55:7: prec2_expr[arg_type] ( ( ADD | SUB ) prec2_expr[arg_type] )*
330
+ @state.following.push(TOKENS_FOLLOWING_prec2_expr_IN_prec1_expr_398)
331
+ prec2_expr(arg_type)
332
+ @state.following.pop
333
+ # at line 56:9: ( ( ADD | SUB ) prec2_expr[arg_type] )*
334
+ loop do # decision 5
335
+ alt_5 = 2
336
+ alt_5 = @dfa5.predict(@input)
337
+ case alt_5
338
+ when 1
339
+ # at line 57:13: ( ADD | SUB ) prec2_expr[arg_type]
340
+ # at line 57:13: ( ADD | SUB )
341
+ alt_4 = 2
342
+ look_4_0 = @input.peek(1)
343
+
344
+ if (look_4_0 == ADD)
345
+ alt_4 = 1
346
+ elsif (look_4_0 == SUB)
347
+ alt_4 = 2
348
+ else
349
+ nvae = NoViableAlternative("", 4, 0)
350
+ raise nvae
351
+ end
352
+ case alt_4
353
+ when 1
354
+ # at line 58:19: ADD
355
+ match(ADD, TOKENS_FOLLOWING_ADD_IN_prec1_expr_443)
356
+ # --> action
357
+ op = [PTGADD].pack('C')
358
+ # <-- action
359
+
360
+ when 2
361
+ # at line 59:19: SUB
362
+ match(SUB, TOKENS_FOLLOWING_SUB_IN_prec1_expr_465)
363
+ # --> action
364
+ op = [PTGSUB].pack('C')
365
+ # <-- action
366
+
367
+ end
368
+ @state.following.push(TOKENS_FOLLOWING_prec2_expr_IN_prec1_expr_495)
369
+ prec2_expr(arg_type)
370
+ @state.following.pop
371
+ # --> action
372
+ @rpn += op
373
+ # <-- action
374
+
375
+ else
376
+ break # out of loop for decision 5
377
+ end
378
+ end # loop for decision 5
379
+
380
+ rescue ANTLR3::Error::RecognitionError => re
381
+ report_error(re)
382
+ recover(re)
383
+
384
+ ensure
385
+ # -> uncomment the next line to manually enable rule tracing
386
+ # trace_out(__method__, 4)
387
+
388
+ end
389
+
390
+ return
391
+ end
392
+
393
+
394
+ # parser rule prec2_expr
395
+ #
396
+ # (in ExcelFormula.g)
397
+ # 66:1: prec2_expr[arg_type] : prec3_expr[arg_type] ( ( MUL | DIV ) prec3_expr[arg_type] )* ;
398
+ def prec2_expr(arg_type)
399
+ # -> uncomment the next line to manually enable rule tracing
400
+ # trace_in(__method__, 5)
401
+
402
+ begin
403
+ # at line 67:7: prec3_expr[arg_type] ( ( MUL | DIV ) prec3_expr[arg_type] )*
404
+ @state.following.push(TOKENS_FOLLOWING_prec3_expr_IN_prec2_expr_528)
405
+ prec3_expr(arg_type)
406
+ @state.following.pop
407
+ # at line 68:9: ( ( MUL | DIV ) prec3_expr[arg_type] )*
408
+ loop do # decision 7
409
+ alt_7 = 2
410
+ alt_7 = @dfa7.predict(@input)
411
+ case alt_7
412
+ when 1
413
+ # at line 69:13: ( MUL | DIV ) prec3_expr[arg_type]
414
+ # at line 69:13: ( MUL | DIV )
415
+ alt_6 = 2
416
+ look_6_0 = @input.peek(1)
417
+
418
+ if (look_6_0 == MUL)
419
+ alt_6 = 1
420
+ elsif (look_6_0 == DIV)
421
+ alt_6 = 2
422
+ else
423
+ nvae = NoViableAlternative("", 6, 0)
424
+ raise nvae
425
+ end
426
+ case alt_6
427
+ when 1
428
+ # at line 70:19: MUL
429
+ match(MUL, TOKENS_FOLLOWING_MUL_IN_prec2_expr_573)
430
+ # --> action
431
+ op = [PTGMUL].pack('C')
432
+ # <-- action
433
+
434
+ when 2
435
+ # at line 71:19: DIV
436
+ match(DIV, TOKENS_FOLLOWING_DIV_IN_prec2_expr_595)
437
+ # --> action
438
+ op = [PTGDIV].pack('C')
439
+ # <-- action
440
+
441
+ end
442
+ @state.following.push(TOKENS_FOLLOWING_prec3_expr_IN_prec2_expr_625)
443
+ prec3_expr(arg_type)
444
+ @state.following.pop
445
+ # --> action
446
+ @rpn += op
447
+ # <-- action
448
+
449
+ else
450
+ break # out of loop for decision 7
451
+ end
452
+ end # loop for decision 7
453
+
454
+ rescue ANTLR3::Error::RecognitionError => re
455
+ report_error(re)
456
+ recover(re)
457
+
458
+ ensure
459
+ # -> uncomment the next line to manually enable rule tracing
460
+ # trace_out(__method__, 5)
461
+
462
+ end
463
+
464
+ return
465
+ end
466
+
467
+
468
+ # parser rule prec3_expr
469
+ #
470
+ # (in ExcelFormula.g)
471
+ # 77:1: prec3_expr[arg_type] : prec4_expr[arg_type] ( ( POWER ) prec4_expr[arg_type] )* ;
472
+ def prec3_expr(arg_type)
473
+ # -> uncomment the next line to manually enable rule tracing
474
+ # trace_in(__method__, 6)
475
+
476
+ begin
477
+ # at line 78:7: prec4_expr[arg_type] ( ( POWER ) prec4_expr[arg_type] )*
478
+ @state.following.push(TOKENS_FOLLOWING_prec4_expr_IN_prec3_expr_657)
479
+ prec4_expr(arg_type)
480
+ @state.following.pop
481
+ # at line 79:9: ( ( POWER ) prec4_expr[arg_type] )*
482
+ loop do # decision 8
483
+ alt_8 = 2
484
+ alt_8 = @dfa8.predict(@input)
485
+ case alt_8
486
+ when 1
487
+ # at line 80:13: ( POWER ) prec4_expr[arg_type]
488
+ # at line 80:13: ( POWER )
489
+ # at line 81:17: POWER
490
+ match(POWER, TOKENS_FOLLOWING_POWER_IN_prec3_expr_700)
491
+ # --> action
492
+ op = [PTGPOWER].pack('C')
493
+ # <-- action
494
+
495
+ @state.following.push(TOKENS_FOLLOWING_prec4_expr_IN_prec3_expr_730)
496
+ prec4_expr(arg_type)
497
+ @state.following.pop
498
+ # --> action
499
+ @rpn += op
500
+ # <-- action
501
+
502
+ else
503
+ break # out of loop for decision 8
504
+ end
505
+ end # loop for decision 8
506
+
507
+ rescue ANTLR3::Error::RecognitionError => re
508
+ report_error(re)
509
+ recover(re)
510
+
511
+ ensure
512
+ # -> uncomment the next line to manually enable rule tracing
513
+ # trace_out(__method__, 6)
514
+
515
+ end
516
+
517
+ return
518
+ end
519
+
520
+
521
+ # parser rule prec4_expr
522
+ #
523
+ # (in ExcelFormula.g)
524
+ # 87:1: prec4_expr[arg_type] : prec5_expr[arg_type] ( PERCENT )? ;
525
+ def prec4_expr(arg_type)
526
+ # -> uncomment the next line to manually enable rule tracing
527
+ # trace_in(__method__, 7)
528
+
529
+ begin
530
+ # at line 88:7: prec5_expr[arg_type] ( PERCENT )?
531
+ @state.following.push(TOKENS_FOLLOWING_prec5_expr_IN_prec4_expr_762)
532
+ prec5_expr(arg_type)
533
+ @state.following.pop
534
+ # at line 89:9: ( PERCENT )?
535
+ alt_9 = 2
536
+ alt_9 = @dfa9.predict(@input)
537
+ case alt_9
538
+ when 1
539
+ # at line 90:13: PERCENT
540
+ match(PERCENT, TOKENS_FOLLOWING_PERCENT_IN_prec4_expr_787)
541
+ # --> action
542
+ @rpn += [PTGPERCENT].pack('C')
543
+ # <-- action
544
+
545
+ end
546
+
547
+ rescue ANTLR3::Error::RecognitionError => re
548
+ report_error(re)
549
+ recover(re)
550
+
551
+ ensure
552
+ # -> uncomment the next line to manually enable rule tracing
553
+ # trace_out(__method__, 7)
554
+
555
+ end
556
+
557
+ return
558
+ end
559
+
560
+
561
+ # parser rule prec5_expr
562
+ #
563
+ # (in ExcelFormula.g)
564
+ # 94:1: prec5_expr[arg_type] : ( primary[arg_type] | SUB primary[arg_type] );
565
+ def prec5_expr(arg_type)
566
+ # -> uncomment the next line to manually enable rule tracing
567
+ # trace_in(__method__, 8)
568
+
569
+ begin
570
+ # at line 95:5: ( primary[arg_type] | SUB primary[arg_type] )
571
+ alt_10 = 2
572
+ alt_10 = @dfa10.predict(@input)
573
+ case alt_10
574
+ when 1
575
+ # at line 95:7: primary[arg_type]
576
+ @state.following.push(TOKENS_FOLLOWING_primary_IN_prec5_expr_818)
577
+ primary(arg_type)
578
+ @state.following.pop
579
+
580
+ when 2
581
+ # at line 96:7: SUB primary[arg_type]
582
+ match(SUB, TOKENS_FOLLOWING_SUB_IN_prec5_expr_827)
583
+ @state.following.push(TOKENS_FOLLOWING_primary_IN_prec5_expr_829)
584
+ primary(arg_type)
585
+ @state.following.pop
586
+ # --> action
587
+ @rpn += [PTGUMINUS].pack('C')
588
+ # <-- action
589
+
590
+ end
591
+ rescue ANTLR3::Error::RecognitionError => re
592
+ report_error(re)
593
+ recover(re)
594
+
595
+ ensure
596
+ # -> uncomment the next line to manually enable rule tracing
597
+ # trace_out(__method__, 8)
598
+
599
+ end
600
+
601
+ return
602
+ end
603
+
604
+
605
+ # parser rule primary
606
+ #
607
+ # (in ExcelFormula.g)
608
+ # 99:1: primary[arg_type] : ( TRUE_CONST | FALSE_CONST | str_tok= STR_CONST | int_tok= INT_CONST | num_tok= NUM_CONST | ref2d_tok= REF2D | ref2d1_tok= REF2D COLON ref2d2_tok= REF2D | LP expr[arg_type] RP | sheet1= sheet ( COLON sheet2= sheet )? BANG ref3d_ref2d= REF2D ( COLON ref3d_ref2d2= REF2D )? | FUNC_IF LP expr[\"V\"] ( SEMICOLON | COMMA ) expr[arg_type] ( SEMICOLON | COMMA ) expr[arg_type] RP | FUNC_CHOOSE LP expr[\"V\"] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* RP | name_tok= NAME | func_tok= NAME LP arg_count= expr_list[arg_type_list, min_argc, max_argc] RP );
609
+ def primary(arg_type)
610
+ # -> uncomment the next line to manually enable rule tracing
611
+ # trace_in(__method__, 9)
612
+ str_tok = nil
613
+ int_tok = nil
614
+ num_tok = nil
615
+ ref2d_tok = nil
616
+ ref2d1_tok = nil
617
+ ref2d2_tok = nil
618
+ ref3d_ref2d = nil
619
+ ref3d_ref2d2 = nil
620
+ name_tok = nil
621
+ func_tok = nil
622
+ sheet1 = nil
623
+ sheet2 = nil
624
+ arg_count = nil
625
+
626
+ begin
627
+ # at line 100:5: ( TRUE_CONST | FALSE_CONST | str_tok= STR_CONST | int_tok= INT_CONST | num_tok= NUM_CONST | ref2d_tok= REF2D | ref2d1_tok= REF2D COLON ref2d2_tok= REF2D | LP expr[arg_type] RP | sheet1= sheet ( COLON sheet2= sheet )? BANG ref3d_ref2d= REF2D ( COLON ref3d_ref2d2= REF2D )? | FUNC_IF LP expr[\"V\"] ( SEMICOLON | COMMA ) expr[arg_type] ( SEMICOLON | COMMA ) expr[arg_type] RP | FUNC_CHOOSE LP expr[\"V\"] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* RP | name_tok= NAME | func_tok= NAME LP arg_count= expr_list[arg_type_list, min_argc, max_argc] RP )
628
+ alt_15 = 13
629
+ alt_15 = @dfa15.predict(@input)
630
+ case alt_15
631
+ when 1
632
+ # at line 100:7: TRUE_CONST
633
+ match(TRUE_CONST, TOKENS_FOLLOWING_TRUE_CONST_IN_primary_850)
634
+ # --> action
635
+
636
+ @rpn += [PTGBOOL, 1].pack("C2")
637
+
638
+ # <-- action
639
+
640
+ when 2
641
+ # at line 104:7: FALSE_CONST
642
+ match(FALSE_CONST, TOKENS_FOLLOWING_FALSE_CONST_IN_primary_868)
643
+ # --> action
644
+
645
+ @rpn += [PTGBOOL, 0].pack("C2")
646
+
647
+ # <-- action
648
+
649
+ when 3
650
+ # at line 108:7: str_tok= STR_CONST
651
+ str_tok = match(STR_CONST, TOKENS_FOLLOWING_STR_CONST_IN_primary_890)
652
+ # --> action
653
+
654
+ s = str_tok.text.gsub("\"", "")
655
+ @rpn += [PTGSTR].pack("C") + [s.length].pack('v') + s
656
+
657
+ # <-- action
658
+
659
+ when 4
660
+ # at line 113:7: int_tok= INT_CONST
661
+ int_tok = match(INT_CONST, TOKENS_FOLLOWING_INT_CONST_IN_primary_912)
662
+ # --> action
663
+
664
+ int_value = int_tok.text.to_i
665
+ if int_value <= 65535
666
+ @rpn += [PTGINT, int_value].pack("Cv")
667
+ else
668
+ @rpn += [PTGNUM, int_value.to_f].pack("CE")
669
+ end
670
+
671
+ # <-- action
672
+
673
+ when 5
674
+ # at line 122:7: num_tok= NUM_CONST
675
+ num_tok = match(NUM_CONST, TOKENS_FOLLOWING_NUM_CONST_IN_primary_930)
676
+ # --> action
677
+
678
+ @rpn += [PTGNUM, num_tok.text.to_f].pack("CE")
679
+
680
+ # <-- action
681
+
682
+ when 6
683
+ # at line 126:7: ref2d_tok= REF2D
684
+ ref2d_tok = match(REF2D, TOKENS_FOLLOWING_REF2D_IN_primary_952)
685
+ # --> action
686
+
687
+ r, c = Utilities.cell_to_packed_rowcol(ref2d_tok.text)
688
+ ptg = PTGREFR + RVA_DELTA_REF[arg_type]
689
+ @rpn += [ptg, r, c].pack("Cv2")
690
+
691
+ # <-- action
692
+
693
+ when 7
694
+ # at line 132:7: ref2d1_tok= REF2D COLON ref2d2_tok= REF2D
695
+ ref2d1_tok = match(REF2D, TOKENS_FOLLOWING_REF2D_IN_primary_974)
696
+ match(COLON, TOKENS_FOLLOWING_COLON_IN_primary_976)
697
+ ref2d2_tok = match(REF2D, TOKENS_FOLLOWING_REF2D_IN_primary_982)
698
+ # --> action
699
+
700
+ r1, c1 = Utilities.cell_to_packed_rowcol(ref2d1_tok.text)
701
+ r2, c2 = Utilities.cell_to_packed_rowcol(ref2d2_tok.text)
702
+ ptg = PTGAREAR + RVA_DELTA_AREA[arg_type]
703
+ @rpn += [ptg, r1, r2, c1, c2].pack("Cv4")
704
+
705
+ # <-- action
706
+
707
+ when 8
708
+ # at line 139:7: LP expr[arg_type] RP
709
+ match(LP, TOKENS_FOLLOWING_LP_IN_primary_1000)
710
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_primary_1002)
711
+ expr(arg_type)
712
+ @state.following.pop
713
+ match(RP, TOKENS_FOLLOWING_RP_IN_primary_1005)
714
+ # --> action
715
+
716
+ @rpn += [PTGPAREN].pack('C')
717
+
718
+ # <-- action
719
+
720
+ when 9
721
+ # at line 143:7: sheet1= sheet ( COLON sheet2= sheet )? BANG ref3d_ref2d= REF2D ( COLON ref3d_ref2d2= REF2D )?
722
+ @state.following.push(TOKENS_FOLLOWING_sheet_IN_primary_1028)
723
+ sheet1 = sheet
724
+ @state.following.pop
725
+ # --> action
726
+
727
+ sheet2 = sheet1
728
+
729
+ # <-- action
730
+ # at line 147:9: ( COLON sheet2= sheet )?
731
+ alt_11 = 2
732
+ look_11_0 = @input.peek(1)
733
+
734
+ if (look_11_0 == COLON)
735
+ alt_11 = 1
736
+ end
737
+ case alt_11
738
+ when 1
739
+ # at line 147:11: COLON sheet2= sheet
740
+ match(COLON, TOKENS_FOLLOWING_COLON_IN_primary_1050)
741
+ @state.following.push(TOKENS_FOLLOWING_sheet_IN_primary_1056)
742
+ sheet2 = sheet
743
+ @state.following.pop
744
+
745
+ end
746
+ match(BANG, TOKENS_FOLLOWING_BANG_IN_primary_1061)
747
+ ref3d_ref2d = match(REF2D, TOKENS_FOLLOWING_REF2D_IN_primary_1065)
748
+ # --> action
749
+
750
+ ptg = PTGREF3DR + RVA_DELTA_REF[arg_type]
751
+ r1, c1 = Utilities.cell_to_packed_rowcol(ref3d_ref2d.text)
752
+ rpn_ref2d = [0x0000, r1, c1].pack("v3")
753
+
754
+ # <-- action
755
+ # at line 153:9: ( COLON ref3d_ref2d2= REF2D )?
756
+ alt_12 = 2
757
+ alt_12 = @dfa12.predict(@input)
758
+ case alt_12
759
+ when 1
760
+ # at line 153:11: COLON ref3d_ref2d2= REF2D
761
+ match(COLON, TOKENS_FOLLOWING_COLON_IN_primary_1087)
762
+ ref3d_ref2d2 = match(REF2D, TOKENS_FOLLOWING_REF2D_IN_primary_1092)
763
+ # --> action
764
+
765
+ ptg = PTGAREA3DR + RVA_DELTA_AREA[arg_type]
766
+ r2, c2 = Utilities.cell_to_packed_rowcol(ref3d_ref2d2.text)
767
+ rpn_ref2d = [0x0000, r1, r2, c1, c2].pack("v5")
768
+
769
+ # <-- action
770
+
771
+ end
772
+ # --> action
773
+
774
+ @rpn += [ptg].pack("C")
775
+ @sheet_references << [sheet1, sheet2, @rpn.size]
776
+ @rpn += rpn_ref2d
777
+
778
+ # <-- action
779
+
780
+ when 10
781
+ # at line 165:7: FUNC_IF LP expr[\"V\"] ( SEMICOLON | COMMA ) expr[arg_type] ( SEMICOLON | COMMA ) expr[arg_type] RP
782
+ match(FUNC_IF, TOKENS_FOLLOWING_FUNC_IF_IN_primary_1135)
783
+ match(LP, TOKENS_FOLLOWING_LP_IN_primary_1145)
784
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_primary_1147)
785
+ expr("V")
786
+ @state.following.pop
787
+ if @input.peek(1).between?(SEMICOLON, COMMA)
788
+ @input.consume
789
+ @state.error_recovery = false
790
+ else
791
+ mse = MismatchedSet(nil)
792
+ raise mse
793
+ end
794
+
795
+
796
+ # --> action
797
+
798
+ @rpn += [PTGATTR, 0x02, 0].pack("C2v") # tAttrIf
799
+ pos0 = @rpn.size - 2
800
+
801
+ # <-- action
802
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_primary_1176)
803
+ expr(arg_type)
804
+ @state.following.pop
805
+ if @input.peek(1).between?(SEMICOLON, COMMA)
806
+ @input.consume
807
+ @state.error_recovery = false
808
+ else
809
+ mse = MismatchedSet(nil)
810
+ raise mse
811
+ end
812
+
813
+
814
+ # --> action
815
+
816
+ @rpn += [PTGATTR, 0x08, 0].pack("C2v") # tAttrSkip
817
+ pos1 = @rpn.size - 2
818
+
819
+ @rpn = @rpn[0...pos0] + [pos1-pos0].pack("v") + @rpn[(pos0+2)...(@rpn.size)]
820
+
821
+ # <-- action
822
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_primary_1205)
823
+ expr(arg_type)
824
+ @state.following.pop
825
+ match(RP, TOKENS_FOLLOWING_RP_IN_primary_1208)
826
+ # --> action
827
+
828
+ @rpn += [PTGATTR, 0x08, 3].pack("C2v") # tAttrSkip
829
+ @rpn += [PTGFUNCVARR, 3, 1].pack("C2v") # 3 = nargs, 1 = IF func
830
+ pos2 = @rpn.size
831
+
832
+ @rpn = @rpn[0...pos1] + [pos2-(pos1+2)-1].pack("v") + @rpn[(pos1+2)...(@rpn.size)]
833
+
834
+ # <-- action
835
+
836
+ when 11
837
+ # at line 186:7: FUNC_CHOOSE LP expr[\"V\"] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* RP
838
+ match(FUNC_CHOOSE, TOKENS_FOLLOWING_FUNC_CHOOSE_IN_primary_1226)
839
+ # --> action
840
+
841
+ arg_type = "R"
842
+ rpn_chunks = []
843
+
844
+ # <-- action
845
+ match(LP, TOKENS_FOLLOWING_LP_IN_primary_1246)
846
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_primary_1248)
847
+ expr("V")
848
+ @state.following.pop
849
+ # --> action
850
+
851
+ rpn_start = @rpn.size
852
+ ref_markers = [@sheet_references.size]
853
+
854
+ # <-- action
855
+ # at line 196:9: ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )*
856
+ loop do # decision 14
857
+ alt_14 = 2
858
+ look_14_0 = @input.peek(1)
859
+
860
+ if (look_14_0.between?(SEMICOLON, COMMA))
861
+ alt_14 = 1
862
+
863
+ end
864
+ case alt_14
865
+ when 1
866
+ # at line 197:13: ( SEMICOLON | COMMA ) ( expr[arg_type] | )
867
+ if @input.peek(1).between?(SEMICOLON, COMMA)
868
+ @input.consume
869
+ @state.error_recovery = false
870
+ else
871
+ mse = MismatchedSet(nil)
872
+ raise mse
873
+ end
874
+
875
+
876
+ # --> action
877
+ mark = @rpn.size
878
+ # <-- action
879
+ # at line 199:17: ( expr[arg_type] | )
880
+ alt_13 = 2
881
+ alt_13 = @dfa13.predict(@input)
882
+ case alt_13
883
+ when 1
884
+ # at line 200:19: expr[arg_type]
885
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_primary_1345)
886
+ expr(arg_type)
887
+ @state.following.pop
888
+
889
+ when 2
890
+ # at line 201:19:
891
+ # --> action
892
+ @rpn += [PTGMISSARG].pack("C")
893
+ # <-- action
894
+
895
+ end
896
+ # --> action
897
+
898
+ rem = @rpn.size - mark
899
+ rpn_chunks << @rpn[mark, rem]
900
+ ref_markers << @sheet_references.size
901
+
902
+ # <-- action
903
+
904
+ else
905
+ break # out of loop for decision 14
906
+ end
907
+ end # loop for decision 14
908
+ match(RP, TOKENS_FOLLOWING_RP_IN_primary_1423)
909
+ # --> action
910
+
911
+ @rpn = @rpn[0...rpn_start]
912
+ nc = rpn_chunks.length
913
+ chunklens = rpn_chunks.collect {|c| c.length}
914
+ skiplens = [0] * nc
915
+ skiplens[nc-1] = 3
916
+
917
+ (nc-1).downto(1) do |i|
918
+ skiplens[i-1] = skiplens[i] + chunklens[i] + 4
919
+ end
920
+ jump_pos = [2*nc + 2]
921
+
922
+ (0...nc).each do |i|
923
+ jump_pos << (jump_pos.last + chunklens[i] + 4)
924
+ end
925
+ chunk_shift = 2*nc + 6 # size of tAttrChoose
926
+
927
+ (0...nc).each do |i|
928
+ (ref_markers[i]...ref_markers[i+1]).each do |r|
929
+ ref = @sheet_references[r]
930
+ @sheet_references[r] = [ref[0], ref[1], ref[2] + chunk_shift]
931
+ end
932
+ chunk_shift += 4 # size of tAttrSkip
933
+ end
934
+
935
+ choose_rpn = []
936
+ choose_rpn << [PTGATTR, 0x04, nc].pack("CCv") # 0x04 is tAttrChoose
937
+ choose_rpn << jump_pos.pack("v*")
938
+
939
+ (0...nc).each do |i|
940
+ choose_rpn << rpn_chunks[i]
941
+ choose_rpn << [PTGATTR, 0x08, skiplens[i]].pack("CCv") # 0x08 is tAttrSkip
942
+ end
943
+ choose_rpn << [PTGFUNCVARV, nc+1, 100].pack("CCv") # 100 is CHOOSE fn
944
+ @rpn += choose_rpn.join
945
+
946
+ # <-- action
947
+
948
+ when 12
949
+ # at line 246:7: name_tok= NAME
950
+ name_tok = match(NAME, TOKENS_FOLLOWING_NAME_IN_primary_1445)
951
+ # --> action
952
+
953
+ raise "[formula] found unexpected NAME token #{name_tok.text}"
954
+
955
+ # <-- action
956
+
957
+ when 13
958
+ # at line 250:7: func_tok= NAME LP arg_count= expr_list[arg_type_list, min_argc, max_argc] RP
959
+ func_tok = match(NAME, TOKENS_FOLLOWING_NAME_IN_primary_1467)
960
+ # --> action
961
+
962
+ func_toku = func_tok.text.upcase
963
+ if STD_FUNC_BY_NAME.has_key?(func_toku)
964
+ opcode, min_argc, max_argc, func_type, arg_type_str = STD_FUNC_BY_NAME[func_toku]
965
+ arg_type_list = arg_type_str.split
966
+ else
967
+ raise "[formula] unknown function #{func_tok.text}"
968
+ end
969
+ xcall = (opcode < 0)
970
+
971
+ if xcall
972
+ @xcall_references << [func_toku, @rpn.size + 1]
973
+ @rpn += [PTGNAMEXR, 0xadde, 0xefbe, 0x0000].pack("Cvvv")
974
+ end
975
+
976
+ # <-- action
977
+ match(LP, TOKENS_FOLLOWING_LP_IN_primary_1487)
978
+ @state.following.push(TOKENS_FOLLOWING_expr_list_IN_primary_1493)
979
+ arg_count = expr_list(arg_type_list, min_argc, max_argc)
980
+ @state.following.pop
981
+ match(RP, TOKENS_FOLLOWING_RP_IN_primary_1496)
982
+ # --> action
983
+
984
+ if (arg_count > max_argc) || (arg_count < min_argc)
985
+ raise "incorrect number #{arg_count} of parameters for function: #{func_tok.text}"
986
+ end
987
+
988
+ if xcall
989
+ func_ptg = PTGFUNCVARR + RVA_DELTA[func_type]
990
+ @rpn += [func_ptg, arg_count + 1, 255].pack("CCv") # 255 is magic XCALL function
991
+ elsif (min_argc == max_argc)
992
+ func_ptg = PTGFUNCR + RVA_DELTA[func_type]
993
+ @rpn += [func_ptg, opcode].pack("Cv")
994
+ elsif (arg_count == 1) && (func_tok.text.upcase === "SUM")
995
+ @rpn += [PTGATTR, 0x10, 0].pack("CCv") # tAttrSum
996
+ else
997
+ func_ptg = PTGFUNCVARR + RVA_DELTA[func_type]
998
+ @rpn += [func_ptg, arg_count, opcode].pack("CCv")
999
+ end
1000
+
1001
+ # <-- action
1002
+
1003
+ end
1004
+ rescue ANTLR3::Error::RecognitionError => re
1005
+ report_error(re)
1006
+ recover(re)
1007
+
1008
+ ensure
1009
+ # -> uncomment the next line to manually enable rule tracing
1010
+ # trace_out(__method__, 9)
1011
+
1012
+ end
1013
+
1014
+ return
1015
+ end
1016
+
1017
+
1018
+ # parser rule expr_list
1019
+ #
1020
+ # (in ExcelFormula.g)
1021
+ # 288:1: expr_list[arg_type_list, min_argc, max_argc] returns [arg_cnt] : ( ( expr[arg_type] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* ) | );
1022
+ def expr_list(arg_type_list, min_argc, max_argc)
1023
+ # -> uncomment the next line to manually enable rule tracing
1024
+ # trace_in(__method__, 10)
1025
+ arg_cnt = nil
1026
+ # - - - - @init action - - - -
1027
+
1028
+ arg_cnt = 0
1029
+
1030
+ # Set these for processing first argument,
1031
+ # it's simpler because first argument type can't be '...'
1032
+ arg_type = arg_type_list.first
1033
+
1034
+ # need to check for '-' for a fn with no arguments
1035
+ arg_cnt += 1 unless arg_type === '-'
1036
+
1037
+
1038
+ begin
1039
+ # at line 300:5: ( ( expr[arg_type] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* ) | )
1040
+ alt_18 = 2
1041
+ alt_18 = @dfa18.predict(@input)
1042
+ case alt_18
1043
+ when 1
1044
+ # at line 301:5: ( expr[arg_type] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* )
1045
+ # at line 301:5: ( expr[arg_type] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* )
1046
+ # at line 301:6: expr[arg_type] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )*
1047
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_expr_list_1540)
1048
+ expr(arg_type)
1049
+ @state.following.pop
1050
+ # at line 302:9: ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )*
1051
+ loop do # decision 17
1052
+ alt_17 = 2
1053
+ look_17_0 = @input.peek(1)
1054
+
1055
+ if (look_17_0.between?(SEMICOLON, COMMA))
1056
+ alt_17 = 1
1057
+
1058
+ end
1059
+ case alt_17
1060
+ when 1
1061
+ # at line 303:14: ( SEMICOLON | COMMA ) ( expr[arg_type] | )
1062
+ if @input.peek(1).between?(SEMICOLON, COMMA)
1063
+ @input.consume
1064
+ @state.error_recovery = false
1065
+ else
1066
+ mse = MismatchedSet(nil)
1067
+ raise mse
1068
+ end
1069
+
1070
+
1071
+ # --> action
1072
+ arg_cnt += 1
1073
+ # <-- action
1074
+ # at line 304:17: ( expr[arg_type] | )
1075
+ alt_16 = 2
1076
+ alt_16 = @dfa16.predict(@input)
1077
+ case alt_16
1078
+ when 1
1079
+ # at line 306:22: expr[arg_type]
1080
+ @state.following.push(TOKENS_FOLLOWING_expr_IN_expr_list_1634)
1081
+ expr(arg_type)
1082
+ @state.following.pop
1083
+ # --> action
1084
+
1085
+ if arg_cnt - 2 < arg_type_list.size
1086
+ arg_type = arg_type_list[arg_cnt - 2]
1087
+ else
1088
+ if arg_type_list.last === "..."
1089
+ # e.g. "V R ..." arbitrary number of args of type R
1090
+ # this will always be last element in arg_type_list
1091
+ # 2nd to last element will provide type
1092
+ arg_type = arg_type_list[arg_type_list.size - 2]
1093
+ else
1094
+ # Just read last element normally.
1095
+ arg_type = arg_type_list[arg_cnt - 2]
1096
+ end
1097
+ end
1098
+
1099
+ # <-- action
1100
+
1101
+ when 2
1102
+ # at line 323:19:
1103
+ # --> action
1104
+ @rpn += [PTGMISSARG].pack("C")
1105
+ # <-- action
1106
+
1107
+ end
1108
+
1109
+ else
1110
+ break # out of loop for decision 17
1111
+ end
1112
+ end # loop for decision 17
1113
+
1114
+
1115
+ when 2
1116
+ # at line 328:5:
1117
+
1118
+ end
1119
+ rescue ANTLR3::Error::RecognitionError => re
1120
+ report_error(re)
1121
+ recover(re)
1122
+
1123
+ ensure
1124
+ # -> uncomment the next line to manually enable rule tracing
1125
+ # trace_out(__method__, 10)
1126
+
1127
+ end
1128
+
1129
+ return arg_cnt
1130
+ end
1131
+
1132
+
1133
+ # parser rule sheet
1134
+ #
1135
+ # (in ExcelFormula.g)
1136
+ # 330:1: sheet returns [ref] : (sheet_ref_name= NAME | sheet_ref_int= INT_CONST | sheet_ref_quote= QUOTENAME );
1137
+ def sheet
1138
+ # -> uncomment the next line to manually enable rule tracing
1139
+ # trace_in(__method__, 11)
1140
+ ref = nil
1141
+ sheet_ref_name = nil
1142
+ sheet_ref_int = nil
1143
+ sheet_ref_quote = nil
1144
+
1145
+ begin
1146
+ # at line 331:5: (sheet_ref_name= NAME | sheet_ref_int= INT_CONST | sheet_ref_quote= QUOTENAME )
1147
+ alt_19 = 3
1148
+ case look_19 = @input.peek(1)
1149
+ when NAME then alt_19 = 1
1150
+ when INT_CONST then alt_19 = 2
1151
+ when QUOTENAME then alt_19 = 3
1152
+ else
1153
+ nvae = NoViableAlternative("", 19, 0)
1154
+ raise nvae
1155
+ end
1156
+ case alt_19
1157
+ when 1
1158
+ # at line 331:7: sheet_ref_name= NAME
1159
+ sheet_ref_name = match(NAME, TOKENS_FOLLOWING_NAME_IN_sheet_1768)
1160
+ # --> action
1161
+ ref = sheet_ref_name.text
1162
+ # <-- action
1163
+
1164
+ when 2
1165
+ # at line 333:7: sheet_ref_int= INT_CONST
1166
+ sheet_ref_int = match(INT_CONST, TOKENS_FOLLOWING_INT_CONST_IN_sheet_1788)
1167
+ # --> action
1168
+ ref = sheet_ref_int.text
1169
+ # <-- action
1170
+
1171
+ when 3
1172
+ # at line 335:7: sheet_ref_quote= QUOTENAME
1173
+ sheet_ref_quote = match(QUOTENAME, TOKENS_FOLLOWING_QUOTENAME_IN_sheet_1808)
1174
+ # --> action
1175
+ ref = sheet_ref_quote.text[1, len(sheet_ref_quote.text) - 1].replace("''", "'")
1176
+ # <-- action
1177
+
1178
+ end
1179
+ rescue ANTLR3::Error::RecognitionError => re
1180
+ report_error(re)
1181
+ recover(re)
1182
+
1183
+ ensure
1184
+ # -> uncomment the next line to manually enable rule tracing
1185
+ # trace_out(__method__, 11)
1186
+
1187
+ end
1188
+
1189
+ return ref
1190
+ end
1191
+
1192
+
1193
+
1194
+ # - - - - - - - - - - DFA definitions - - - - - - - - - - -
1195
+ class DFA2 < ANTLR3::DFA
1196
+ EOT = unpack(10, -1)
1197
+ EOF = unpack(1, 1, 9, -1)
1198
+ MIN = unpack(1, 4, 9, -1)
1199
+ MAX = unpack(1, 29, 9, -1)
1200
+ ACCEPT = unpack(1, -1, 1, 2, 2, -1, 1, 1, 5, -1)
1201
+ SPECIAL = unpack(10, -1)
1202
+ TRANSITION = [
1203
+ unpack(6, 4, 15, -1, 1, 1, 2, -1, 2, 1),
1204
+ unpack(),
1205
+ unpack(),
1206
+ unpack(),
1207
+ unpack(),
1208
+ unpack(),
1209
+ unpack(),
1210
+ unpack(),
1211
+ unpack(),
1212
+ unpack()
1213
+ ].freeze
1214
+
1215
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1216
+ if a > 0 and z < 0
1217
+ MAX[ i ] %= 0x10000
1218
+ end
1219
+ end
1220
+
1221
+ @decision = 2
1222
+
1223
+
1224
+ def description
1225
+ <<-'__dfa_description__'.strip!
1226
+ ()* loopback of 30:9: ( ( EQ | NE | GT | LT | GE | LE ) prec0_expr[arg_type] )*
1227
+ __dfa_description__
1228
+ end
1229
+ end
1230
+ class DFA3 < ANTLR3::DFA
1231
+ EOT = unpack(11, -1)
1232
+ EOF = unpack(1, 1, 10, -1)
1233
+ MIN = unpack(1, 4, 10, -1)
1234
+ MAX = unpack(1, 29, 10, -1)
1235
+ ACCEPT = unpack(1, -1, 1, 2, 8, -1, 1, 1)
1236
+ SPECIAL = unpack(11, -1)
1237
+ TRANSITION = [
1238
+ unpack(6, 1, 1, 10, 14, -1, 1, 1, 2, -1, 2, 1),
1239
+ unpack(),
1240
+ unpack(),
1241
+ unpack(),
1242
+ unpack(),
1243
+ unpack(),
1244
+ unpack(),
1245
+ unpack(),
1246
+ unpack(),
1247
+ unpack(),
1248
+ unpack()
1249
+ ].freeze
1250
+
1251
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1252
+ if a > 0 and z < 0
1253
+ MAX[ i ] %= 0x10000
1254
+ end
1255
+ end
1256
+
1257
+ @decision = 3
1258
+
1259
+
1260
+ def description
1261
+ <<-'__dfa_description__'.strip!
1262
+ ()* loopback of 46:9: ( ( CONCAT ) prec1_expr[arg_type] )*
1263
+ __dfa_description__
1264
+ end
1265
+ end
1266
+ class DFA5 < ANTLR3::DFA
1267
+ EOT = unpack(13, -1)
1268
+ EOF = unpack(1, 1, 12, -1)
1269
+ MIN = unpack(1, 4, 12, -1)
1270
+ MAX = unpack(1, 29, 12, -1)
1271
+ ACCEPT = unpack(1, -1, 1, 2, 9, -1, 1, 1, 1, -1)
1272
+ SPECIAL = unpack(13, -1)
1273
+ TRANSITION = [
1274
+ unpack(7, 1, 2, 11, 12, -1, 1, 1, 2, -1, 2, 1),
1275
+ unpack(),
1276
+ unpack(),
1277
+ unpack(),
1278
+ unpack(),
1279
+ unpack(),
1280
+ unpack(),
1281
+ unpack(),
1282
+ unpack(),
1283
+ unpack(),
1284
+ unpack(),
1285
+ unpack(),
1286
+ unpack()
1287
+ ].freeze
1288
+
1289
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1290
+ if a > 0 and z < 0
1291
+ MAX[ i ] %= 0x10000
1292
+ end
1293
+ end
1294
+
1295
+ @decision = 5
1296
+
1297
+
1298
+ def description
1299
+ <<-'__dfa_description__'.strip!
1300
+ ()* loopback of 56:9: ( ( ADD | SUB ) prec2_expr[arg_type] )*
1301
+ __dfa_description__
1302
+ end
1303
+ end
1304
+ class DFA7 < ANTLR3::DFA
1305
+ EOT = unpack(15, -1)
1306
+ EOF = unpack(1, 1, 14, -1)
1307
+ MIN = unpack(1, 4, 14, -1)
1308
+ MAX = unpack(1, 29, 14, -1)
1309
+ ACCEPT = unpack(1, -1, 1, 2, 11, -1, 1, 1, 1, -1)
1310
+ SPECIAL = unpack(15, -1)
1311
+ TRANSITION = [
1312
+ unpack(9, 1, 2, 13, 10, -1, 1, 1, 2, -1, 2, 1),
1313
+ unpack(),
1314
+ unpack(),
1315
+ unpack(),
1316
+ unpack(),
1317
+ unpack(),
1318
+ unpack(),
1319
+ unpack(),
1320
+ unpack(),
1321
+ unpack(),
1322
+ unpack(),
1323
+ unpack(),
1324
+ unpack(),
1325
+ unpack(),
1326
+ unpack()
1327
+ ].freeze
1328
+
1329
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1330
+ if a > 0 and z < 0
1331
+ MAX[ i ] %= 0x10000
1332
+ end
1333
+ end
1334
+
1335
+ @decision = 7
1336
+
1337
+
1338
+ def description
1339
+ <<-'__dfa_description__'.strip!
1340
+ ()* loopback of 68:9: ( ( MUL | DIV ) prec3_expr[arg_type] )*
1341
+ __dfa_description__
1342
+ end
1343
+ end
1344
+ class DFA8 < ANTLR3::DFA
1345
+ EOT = unpack(16, -1)
1346
+ EOF = unpack(1, 1, 15, -1)
1347
+ MIN = unpack(1, 4, 15, -1)
1348
+ MAX = unpack(1, 29, 15, -1)
1349
+ ACCEPT = unpack(1, -1, 1, 2, 13, -1, 1, 1)
1350
+ SPECIAL = unpack(16, -1)
1351
+ TRANSITION = [
1352
+ unpack(11, 1, 1, 15, 9, -1, 1, 1, 2, -1, 2, 1),
1353
+ unpack(),
1354
+ unpack(),
1355
+ unpack(),
1356
+ unpack(),
1357
+ unpack(),
1358
+ unpack(),
1359
+ unpack(),
1360
+ unpack(),
1361
+ unpack(),
1362
+ unpack(),
1363
+ unpack(),
1364
+ unpack(),
1365
+ unpack(),
1366
+ unpack(),
1367
+ unpack()
1368
+ ].freeze
1369
+
1370
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1371
+ if a > 0 and z < 0
1372
+ MAX[ i ] %= 0x10000
1373
+ end
1374
+ end
1375
+
1376
+ @decision = 8
1377
+
1378
+
1379
+ def description
1380
+ <<-'__dfa_description__'.strip!
1381
+ ()* loopback of 79:9: ( ( POWER ) prec4_expr[arg_type] )*
1382
+ __dfa_description__
1383
+ end
1384
+ end
1385
+ class DFA9 < ANTLR3::DFA
1386
+ EOT = unpack(17, -1)
1387
+ EOF = unpack(1, 2, 16, -1)
1388
+ MIN = unpack(1, 4, 16, -1)
1389
+ MAX = unpack(1, 29, 16, -1)
1390
+ ACCEPT = unpack(1, -1, 1, 1, 1, 2, 14, -1)
1391
+ SPECIAL = unpack(17, -1)
1392
+ TRANSITION = [
1393
+ unpack(12, 2, 1, 1, 8, -1, 1, 2, 2, -1, 2, 2),
1394
+ unpack(),
1395
+ unpack(),
1396
+ unpack(),
1397
+ unpack(),
1398
+ unpack(),
1399
+ unpack(),
1400
+ unpack(),
1401
+ unpack(),
1402
+ unpack(),
1403
+ unpack(),
1404
+ unpack(),
1405
+ unpack(),
1406
+ unpack(),
1407
+ unpack(),
1408
+ unpack(),
1409
+ unpack()
1410
+ ].freeze
1411
+
1412
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1413
+ if a > 0 and z < 0
1414
+ MAX[ i ] %= 0x10000
1415
+ end
1416
+ end
1417
+
1418
+ @decision = 9
1419
+
1420
+
1421
+ def description
1422
+ <<-'__dfa_description__'.strip!
1423
+ 89:9: ( PERCENT )?
1424
+ __dfa_description__
1425
+ end
1426
+ end
1427
+ class DFA10 < ANTLR3::DFA
1428
+ EOT = unpack(13, -1)
1429
+ EOF = unpack(13, -1)
1430
+ MIN = unpack(1, 12, 12, -1)
1431
+ MAX = unpack(1, 32, 12, -1)
1432
+ ACCEPT = unpack(1, -1, 1, 1, 10, -1, 1, 2)
1433
+ SPECIAL = unpack(13, -1)
1434
+ TRANSITION = [
1435
+ unpack(1, 12, 4, -1, 6, 1, 1, -1, 1, 1, 2, -1, 1, 1, 2, -1, 3, 1),
1436
+ unpack(),
1437
+ unpack(),
1438
+ unpack(),
1439
+ unpack(),
1440
+ unpack(),
1441
+ unpack(),
1442
+ unpack(),
1443
+ unpack(),
1444
+ unpack(),
1445
+ unpack(),
1446
+ unpack(),
1447
+ unpack()
1448
+ ].freeze
1449
+
1450
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1451
+ if a > 0 and z < 0
1452
+ MAX[ i ] %= 0x10000
1453
+ end
1454
+ end
1455
+
1456
+ @decision = 10
1457
+
1458
+
1459
+ def description
1460
+ <<-'__dfa_description__'.strip!
1461
+ 94:1: prec5_expr[arg_type] : ( primary[arg_type] | SUB primary[arg_type] );
1462
+ __dfa_description__
1463
+ end
1464
+ end
1465
+ class DFA15 < ANTLR3::DFA
1466
+ EOT = unpack(66, -1)
1467
+ EOF = unpack(4, -1, 1, 12, 1, -1, 1, 31, 1, -1, 1, 49, 57, -1)
1468
+ MIN = unpack(1, 17, 3, -1, 1, 4, 1, -1, 1, 4, 1, -1, 1, 4, 57, -1)
1469
+ MAX = unpack(1, 32, 3, -1, 1, 29, 1, -1, 1, 29, 1, -1, 1, 29, 57,
1470
+ -1)
1471
+ ACCEPT = unpack(1, -1, 1, 1, 1, 2, 1, 3, 1, -1, 1, 5, 1, -1, 1, 8,
1472
+ 1, -1, 1, 9, 1, 10, 1, 11, 1, 4, 17, -1, 1, 7, 1,
1473
+ 6, 17, -1, 1, 12, 15, -1, 1, 13)
1474
+ SPECIAL = unpack(66, -1)
1475
+ TRANSITION = [
1476
+ unpack(1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, -1, 1, 7, 2, -1, 1,
1477
+ 10, 2, -1, 1, 11, 1, 8, 1, 9),
1478
+ unpack(),
1479
+ unpack(),
1480
+ unpack(),
1481
+ unpack(13, 12, 6, -1, 1, 9, 1, -1, 1, 12, 1, 9, 1, -1, 2, 12),
1482
+ unpack(),
1483
+ unpack(13, 31, 6, -1, 1, 30, 1, -1, 1, 31, 2, -1, 2, 31),
1484
+ unpack(),
1485
+ unpack(13, 49, 6, -1, 1, 9, 1, 65, 1, 49, 1, 9, 1, -1, 2, 49),
1486
+ unpack(),
1487
+ unpack(),
1488
+ unpack(),
1489
+ unpack(),
1490
+ unpack(),
1491
+ unpack(),
1492
+ unpack(),
1493
+ unpack(),
1494
+ unpack(),
1495
+ unpack(),
1496
+ unpack(),
1497
+ unpack(),
1498
+ unpack(),
1499
+ unpack(),
1500
+ unpack(),
1501
+ unpack(),
1502
+ unpack(),
1503
+ unpack(),
1504
+ unpack(),
1505
+ unpack(),
1506
+ unpack(),
1507
+ unpack(),
1508
+ unpack(),
1509
+ unpack(),
1510
+ unpack(),
1511
+ unpack(),
1512
+ unpack(),
1513
+ unpack(),
1514
+ unpack(),
1515
+ unpack(),
1516
+ unpack(),
1517
+ unpack(),
1518
+ unpack(),
1519
+ unpack(),
1520
+ unpack(),
1521
+ unpack(),
1522
+ unpack(),
1523
+ unpack(),
1524
+ unpack(),
1525
+ unpack(),
1526
+ unpack(),
1527
+ unpack(),
1528
+ unpack(),
1529
+ unpack(),
1530
+ unpack(),
1531
+ unpack(),
1532
+ unpack(),
1533
+ unpack(),
1534
+ unpack(),
1535
+ unpack(),
1536
+ unpack(),
1537
+ unpack(),
1538
+ unpack(),
1539
+ unpack(),
1540
+ unpack(),
1541
+ unpack(),
1542
+ unpack()
1543
+ ].freeze
1544
+
1545
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1546
+ if a > 0 and z < 0
1547
+ MAX[ i ] %= 0x10000
1548
+ end
1549
+ end
1550
+
1551
+ @decision = 15
1552
+
1553
+
1554
+ def description
1555
+ <<-'__dfa_description__'.strip!
1556
+ 99:1: primary[arg_type] : ( TRUE_CONST | FALSE_CONST | str_tok= STR_CONST | int_tok= INT_CONST | num_tok= NUM_CONST | ref2d_tok= REF2D | ref2d1_tok= REF2D COLON ref2d2_tok= REF2D | LP expr[arg_type] RP | sheet1= sheet ( COLON sheet2= sheet )? BANG ref3d_ref2d= REF2D ( COLON ref3d_ref2d2= REF2D )? | FUNC_IF LP expr[\"V\"] ( SEMICOLON | COMMA ) expr[arg_type] ( SEMICOLON | COMMA ) expr[arg_type] RP | FUNC_CHOOSE LP expr[\"V\"] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* RP | name_tok= NAME | func_tok= NAME LP arg_count= expr_list[arg_type_list, min_argc, max_argc] RP );
1557
+ __dfa_description__
1558
+ end
1559
+ end
1560
+ class DFA12 < ANTLR3::DFA
1561
+ EOT = unpack(18, -1)
1562
+ EOF = unpack(1, 2, 17, -1)
1563
+ MIN = unpack(1, 4, 17, -1)
1564
+ MAX = unpack(1, 29, 17, -1)
1565
+ ACCEPT = unpack(1, -1, 1, 1, 1, 2, 15, -1)
1566
+ SPECIAL = unpack(18, -1)
1567
+ TRANSITION = [
1568
+ unpack(13, 2, 6, -1, 1, 1, 1, -1, 1, 2, 2, -1, 2, 2),
1569
+ unpack(),
1570
+ unpack(),
1571
+ unpack(),
1572
+ unpack(),
1573
+ unpack(),
1574
+ unpack(),
1575
+ unpack(),
1576
+ unpack(),
1577
+ unpack(),
1578
+ unpack(),
1579
+ unpack(),
1580
+ unpack(),
1581
+ unpack(),
1582
+ unpack(),
1583
+ unpack(),
1584
+ unpack(),
1585
+ unpack()
1586
+ ].freeze
1587
+
1588
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1589
+ if a > 0 and z < 0
1590
+ MAX[ i ] %= 0x10000
1591
+ end
1592
+ end
1593
+
1594
+ @decision = 12
1595
+
1596
+
1597
+ def description
1598
+ <<-'__dfa_description__'.strip!
1599
+ 153:9: ( COLON ref3d_ref2d2= REF2D )?
1600
+ __dfa_description__
1601
+ end
1602
+ end
1603
+ class DFA13 < ANTLR3::DFA
1604
+ EOT = unpack(15, -1)
1605
+ EOF = unpack(15, -1)
1606
+ MIN = unpack(1, 12, 14, -1)
1607
+ MAX = unpack(1, 32, 14, -1)
1608
+ ACCEPT = unpack(1, -1, 1, 1, 11, -1, 1, 2, 1, -1)
1609
+ SPECIAL = unpack(15, -1)
1610
+ TRANSITION = [
1611
+ unpack(1, 1, 4, -1, 6, 1, 1, -1, 1, 1, 1, 13, 1, -1, 1, 1, 2, 13,
1612
+ 3, 1),
1613
+ unpack(),
1614
+ unpack(),
1615
+ unpack(),
1616
+ unpack(),
1617
+ unpack(),
1618
+ unpack(),
1619
+ unpack(),
1620
+ unpack(),
1621
+ unpack(),
1622
+ unpack(),
1623
+ unpack(),
1624
+ unpack(),
1625
+ unpack(),
1626
+ unpack()
1627
+ ].freeze
1628
+
1629
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1630
+ if a > 0 and z < 0
1631
+ MAX[ i ] %= 0x10000
1632
+ end
1633
+ end
1634
+
1635
+ @decision = 13
1636
+
1637
+
1638
+ def description
1639
+ <<-'__dfa_description__'.strip!
1640
+ 199:17: ( expr[arg_type] | )
1641
+ __dfa_description__
1642
+ end
1643
+ end
1644
+ class DFA18 < ANTLR3::DFA
1645
+ EOT = unpack(14, -1)
1646
+ EOF = unpack(14, -1)
1647
+ MIN = unpack(1, 12, 13, -1)
1648
+ MAX = unpack(1, 32, 13, -1)
1649
+ ACCEPT = unpack(1, -1, 1, 1, 11, -1, 1, 2)
1650
+ SPECIAL = unpack(14, -1)
1651
+ TRANSITION = [
1652
+ unpack(1, 1, 4, -1, 6, 1, 1, -1, 1, 1, 1, 13, 1, -1, 1, 1, 2, -1,
1653
+ 3, 1),
1654
+ unpack(),
1655
+ unpack(),
1656
+ unpack(),
1657
+ unpack(),
1658
+ unpack(),
1659
+ unpack(),
1660
+ unpack(),
1661
+ unpack(),
1662
+ unpack(),
1663
+ unpack(),
1664
+ unpack(),
1665
+ unpack(),
1666
+ unpack()
1667
+ ].freeze
1668
+
1669
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1670
+ if a > 0 and z < 0
1671
+ MAX[ i ] %= 0x10000
1672
+ end
1673
+ end
1674
+
1675
+ @decision = 18
1676
+
1677
+
1678
+ def description
1679
+ <<-'__dfa_description__'.strip!
1680
+ 288:1: expr_list[arg_type_list, min_argc, max_argc] returns [arg_cnt] : ( ( expr[arg_type] ( ( SEMICOLON | COMMA ) ( expr[arg_type] | ) )* ) | );
1681
+ __dfa_description__
1682
+ end
1683
+ end
1684
+ class DFA16 < ANTLR3::DFA
1685
+ EOT = unpack(15, -1)
1686
+ EOF = unpack(15, -1)
1687
+ MIN = unpack(1, 12, 14, -1)
1688
+ MAX = unpack(1, 32, 14, -1)
1689
+ ACCEPT = unpack(1, -1, 1, 1, 11, -1, 1, 2, 1, -1)
1690
+ SPECIAL = unpack(15, -1)
1691
+ TRANSITION = [
1692
+ unpack(1, 1, 4, -1, 6, 1, 1, -1, 1, 1, 1, 13, 1, -1, 1, 1, 2, 13,
1693
+ 3, 1),
1694
+ unpack(),
1695
+ unpack(),
1696
+ unpack(),
1697
+ unpack(),
1698
+ unpack(),
1699
+ unpack(),
1700
+ unpack(),
1701
+ unpack(),
1702
+ unpack(),
1703
+ unpack(),
1704
+ unpack(),
1705
+ unpack(),
1706
+ unpack(),
1707
+ unpack()
1708
+ ].freeze
1709
+
1710
+ ( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
1711
+ if a > 0 and z < 0
1712
+ MAX[ i ] %= 0x10000
1713
+ end
1714
+ end
1715
+
1716
+ @decision = 16
1717
+
1718
+
1719
+ def description
1720
+ <<-'__dfa_description__'.strip!
1721
+ 304:17: ( expr[arg_type] | )
1722
+ __dfa_description__
1723
+ end
1724
+ end
1725
+
1726
+
1727
+ private
1728
+
1729
+ def initialize_dfas
1730
+ super rescue nil
1731
+ @dfa2 = DFA2.new(self, 2)
1732
+ @dfa3 = DFA3.new(self, 3)
1733
+ @dfa5 = DFA5.new(self, 5)
1734
+ @dfa7 = DFA7.new(self, 7)
1735
+ @dfa8 = DFA8.new(self, 8)
1736
+ @dfa9 = DFA9.new(self, 9)
1737
+ @dfa10 = DFA10.new(self, 10)
1738
+ @dfa15 = DFA15.new(self, 15)
1739
+ @dfa12 = DFA12.new(self, 12)
1740
+ @dfa13 = DFA13.new(self, 13)
1741
+ @dfa18 = DFA18.new(self, 18)
1742
+ @dfa16 = DFA16.new(self, 16)
1743
+
1744
+ end
1745
+ TOKENS_FOLLOWING_expr_IN_formula_56 = Set[1]
1746
+ TOKENS_FOLLOWING_prec0_expr_IN_expr_75 = Set[1, 4, 5, 6, 7, 8, 9]
1747
+ TOKENS_FOLLOWING_EQ_IN_expr_120 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1748
+ TOKENS_FOLLOWING_NE_IN_expr_142 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1749
+ TOKENS_FOLLOWING_GT_IN_expr_164 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1750
+ TOKENS_FOLLOWING_LT_IN_expr_186 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1751
+ TOKENS_FOLLOWING_GE_IN_expr_208 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1752
+ TOKENS_FOLLOWING_LE_IN_expr_230 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1753
+ TOKENS_FOLLOWING_prec0_expr_IN_expr_261 = Set[1, 4, 5, 6, 7, 8, 9]
1754
+ TOKENS_FOLLOWING_prec1_expr_IN_prec0_expr_293 = Set[1, 10]
1755
+ TOKENS_FOLLOWING_CONCAT_IN_prec0_expr_336 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1756
+ TOKENS_FOLLOWING_prec1_expr_IN_prec0_expr_366 = Set[1, 10]
1757
+ TOKENS_FOLLOWING_prec2_expr_IN_prec1_expr_398 = Set[1, 11, 12]
1758
+ TOKENS_FOLLOWING_ADD_IN_prec1_expr_443 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1759
+ TOKENS_FOLLOWING_SUB_IN_prec1_expr_465 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1760
+ TOKENS_FOLLOWING_prec2_expr_IN_prec1_expr_495 = Set[1, 11, 12]
1761
+ TOKENS_FOLLOWING_prec3_expr_IN_prec2_expr_528 = Set[1, 13, 14]
1762
+ TOKENS_FOLLOWING_MUL_IN_prec2_expr_573 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1763
+ TOKENS_FOLLOWING_DIV_IN_prec2_expr_595 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1764
+ TOKENS_FOLLOWING_prec3_expr_IN_prec2_expr_625 = Set[1, 13, 14]
1765
+ TOKENS_FOLLOWING_prec4_expr_IN_prec3_expr_657 = Set[1, 15]
1766
+ TOKENS_FOLLOWING_POWER_IN_prec3_expr_700 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1767
+ TOKENS_FOLLOWING_prec4_expr_IN_prec3_expr_730 = Set[1, 15]
1768
+ TOKENS_FOLLOWING_prec5_expr_IN_prec4_expr_762 = Set[1, 16]
1769
+ TOKENS_FOLLOWING_PERCENT_IN_prec4_expr_787 = Set[1]
1770
+ TOKENS_FOLLOWING_primary_IN_prec5_expr_818 = Set[1]
1771
+ TOKENS_FOLLOWING_SUB_IN_prec5_expr_827 = Set[17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1772
+ TOKENS_FOLLOWING_primary_IN_prec5_expr_829 = Set[1]
1773
+ TOKENS_FOLLOWING_TRUE_CONST_IN_primary_850 = Set[1]
1774
+ TOKENS_FOLLOWING_FALSE_CONST_IN_primary_868 = Set[1]
1775
+ TOKENS_FOLLOWING_STR_CONST_IN_primary_890 = Set[1]
1776
+ TOKENS_FOLLOWING_INT_CONST_IN_primary_912 = Set[1]
1777
+ TOKENS_FOLLOWING_NUM_CONST_IN_primary_930 = Set[1]
1778
+ TOKENS_FOLLOWING_REF2D_IN_primary_952 = Set[1]
1779
+ TOKENS_FOLLOWING_REF2D_IN_primary_974 = Set[23]
1780
+ TOKENS_FOLLOWING_COLON_IN_primary_976 = Set[22]
1781
+ TOKENS_FOLLOWING_REF2D_IN_primary_982 = Set[1]
1782
+ TOKENS_FOLLOWING_LP_IN_primary_1000 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1783
+ TOKENS_FOLLOWING_expr_IN_primary_1002 = Set[25]
1784
+ TOKENS_FOLLOWING_RP_IN_primary_1005 = Set[1]
1785
+ TOKENS_FOLLOWING_sheet_IN_primary_1028 = Set[23, 26]
1786
+ TOKENS_FOLLOWING_COLON_IN_primary_1050 = Set[20, 31, 32]
1787
+ TOKENS_FOLLOWING_sheet_IN_primary_1056 = Set[26]
1788
+ TOKENS_FOLLOWING_BANG_IN_primary_1061 = Set[22]
1789
+ TOKENS_FOLLOWING_REF2D_IN_primary_1065 = Set[1, 23]
1790
+ TOKENS_FOLLOWING_COLON_IN_primary_1087 = Set[22]
1791
+ TOKENS_FOLLOWING_REF2D_IN_primary_1092 = Set[1]
1792
+ TOKENS_FOLLOWING_FUNC_IF_IN_primary_1135 = Set[24]
1793
+ TOKENS_FOLLOWING_LP_IN_primary_1145 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1794
+ TOKENS_FOLLOWING_expr_IN_primary_1147 = Set[28, 29]
1795
+ TOKENS_FOLLOWING_set_IN_primary_1150 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1796
+ TOKENS_FOLLOWING_expr_IN_primary_1176 = Set[28, 29]
1797
+ TOKENS_FOLLOWING_set_IN_primary_1179 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1798
+ TOKENS_FOLLOWING_expr_IN_primary_1205 = Set[25]
1799
+ TOKENS_FOLLOWING_RP_IN_primary_1208 = Set[1]
1800
+ TOKENS_FOLLOWING_FUNC_CHOOSE_IN_primary_1226 = Set[24]
1801
+ TOKENS_FOLLOWING_LP_IN_primary_1246 = Set[12, 17, 18, 19, 20, 21, 22, 24, 27, 30, 31, 32]
1802
+ TOKENS_FOLLOWING_expr_IN_primary_1248 = Set[25, 28, 29]
1803
+ TOKENS_FOLLOWING_set_IN_primary_1283 = Set[12, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32]
1804
+ TOKENS_FOLLOWING_expr_IN_primary_1345 = Set[25, 28, 29]
1805
+ TOKENS_FOLLOWING_RP_IN_primary_1423 = Set[1]
1806
+ TOKENS_FOLLOWING_NAME_IN_primary_1445 = Set[1]
1807
+ TOKENS_FOLLOWING_NAME_IN_primary_1467 = Set[24]
1808
+ TOKENS_FOLLOWING_LP_IN_primary_1487 = Set[12, 17, 18, 19, 20, 21, 22, 24, 25, 27, 30, 31, 32]
1809
+ TOKENS_FOLLOWING_expr_list_IN_primary_1493 = Set[25]
1810
+ TOKENS_FOLLOWING_RP_IN_primary_1496 = Set[1]
1811
+ TOKENS_FOLLOWING_expr_IN_expr_list_1540 = Set[1, 28, 29]
1812
+ TOKENS_FOLLOWING_set_IN_expr_list_1566 = Set[1, 12, 17, 18, 19, 20, 21, 22, 24, 27, 28, 29, 30, 31, 32]
1813
+ TOKENS_FOLLOWING_expr_IN_expr_list_1634 = Set[1, 28, 29]
1814
+ TOKENS_FOLLOWING_NAME_IN_sheet_1768 = Set[1]
1815
+ TOKENS_FOLLOWING_INT_CONST_IN_sheet_1788 = Set[1]
1816
+ TOKENS_FOLLOWING_QUOTENAME_IN_sheet_1808 = Set[1]
1817
+
1818
+ end # class Parser < ANTLR3::Parser
1819
+
1820
+ at_exit { Parser.main(ARGV) } if __FILE__ == $0
1821
+ end
1822
+