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.
- data/History.txt +4 -0
- data/LICENSE.txt +110 -0
- data/README.txt +26 -0
- data/Rakefile +36 -0
- data/bin/surpass +8 -0
- data/lib/surpass.rb +64 -0
- data/lib/surpass/ExcelFormula.g +393 -0
- data/lib/surpass/ExcelFormula.tokens +32 -0
- data/lib/surpass/ExcelFormulaLexer.rb +1490 -0
- data/lib/surpass/ExcelFormulaParser.rb +1822 -0
- data/lib/surpass/biff_record.rb +2173 -0
- data/lib/surpass/bitmap.rb +218 -0
- data/lib/surpass/chart.rb +16 -0
- data/lib/surpass/column.rb +40 -0
- data/lib/surpass/document.rb +406 -0
- data/lib/surpass/excel_magic.rb +1016 -0
- data/lib/surpass/formatting.rb +607 -0
- data/lib/surpass/formula.rb +25 -0
- data/lib/surpass/row.rb +173 -0
- data/lib/surpass/style.rb +194 -0
- data/lib/surpass/surpass_cell.rb +187 -0
- data/lib/surpass/tokens.txt +2 -0
- data/lib/surpass/utilities.rb +118 -0
- data/lib/surpass/workbook.rb +207 -0
- data/lib/surpass/worksheet.rb +574 -0
- data/rmasalov-surpass +0 -0
- data/surpass.gemspec +39 -0
- metadata +120 -0
@@ -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
|
+
|