surpass 0.0.9 → 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,26 @@
1
+ # The list of files that should be ignored by Mr Bones.
2
+ # Lines that start with '#' are comments.
3
+ #
4
+ # A .gitignore file can be used instead by setting it as the ignore
5
+ # file in your Rakefile:
6
+ #
7
+ # PROJ.ignore_file = '.gitignore'
8
+ #
9
+ # For a project with a C extension, the following would be a good set of
10
+ # exclude patterns (uncomment them if you want to use them):
11
+ # *.[oa]
12
+ # *~
13
+ announcement.txt
14
+ coverage
15
+ doc
16
+ pkg
17
+ .DS_Store
18
+ .bzr
19
+ .bzrignore
20
+ examples
21
+ debug-examples
22
+ webby
23
+ stats
24
+ spec
25
+ *.swp
26
+
data/Rakefile CHANGED
@@ -26,3 +26,12 @@ desc "run antlr compiler"
26
26
  task :antlr do
27
27
  `cd lib/surpass; antlr4ruby ExcelFormula.g`
28
28
  end
29
+
30
+ desc "run examples"
31
+ task :examples do
32
+ `rm examples/*.xls`
33
+ `cd examples; ls *.rb`.chomp.split.each do |f|
34
+ next if f =~ /big/
35
+ `jruby #{File.expand_path(f, "examples")}`
36
+ end
37
+ end
@@ -1,7 +1,7 @@
1
1
  module Surpass
2
2
 
3
3
  # :stopdoc:
4
- VERSION = '0.0.9'
4
+ VERSION = '0.1.0'
5
5
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
6
6
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
7
7
  # :startdoc:
@@ -41,6 +41,7 @@ module Surpass
41
41
  Dir.glob(search_me).sort.each do |rb|
42
42
  next if File.basename(rb) === File.basename(__FILE__) # skip surpass.rb
43
43
  next if File.basename(rb) =~ /^ExcelFormula/ unless FORMULAS_AVAILABLE
44
+ next if File.basename(rb) =~ /^excel_magic/ # already loaded this
44
45
  require rb
45
46
  end
46
47
  end
@@ -56,6 +57,8 @@ rescue Exception => e
56
57
  FORMULAS_AVAILABLE = false
57
58
  end
58
59
 
60
+ require File.join(File.dirname(__FILE__), 'surpass', 'excel_magic')
61
+ include ExcelMagic
59
62
  Surpass.require_all_libs_relative_to(__FILE__)
60
63
  require 'date'
61
64
 
@@ -1,8 +1,8 @@
1
1
  grammar ExcelFormula;
2
2
 
3
3
  options {
4
- language = Ruby;
5
- k = 2;
4
+ language = Ruby;
5
+ k = 2;
6
6
  }
7
7
 
8
8
  @header {
@@ -75,12 +75,12 @@ prec2_expr[arg_type]
75
75
  ;
76
76
 
77
77
  prec3_expr[arg_type]
78
- : prec5_expr[arg_type]
78
+ : prec4_expr[arg_type]
79
79
  (
80
80
  (
81
81
  POWER { op = [PTGPOWER].pack('C') }
82
82
  )
83
- prec5_expr[arg_type] { @rpn += op }
83
+ prec4_expr[arg_type] { @rpn += op }
84
84
  )*
85
85
  ;
86
86
 
@@ -126,31 +126,33 @@ primary[arg_type]
126
126
  | ref2d_tok = REF2D
127
127
  {
128
128
  r, c = Utilities.cell_to_packed_rowcol(ref2d_tok.text)
129
- ptg = PTGREFR + RVA_DELTA[arg_type]
129
+ ptg = PTGREFR + RVA_DELTA_REF[arg_type]
130
130
  @rpn += [ptg, r, c].pack("Cv2")
131
131
  }
132
132
  | ref2d1_tok = REF2D COLON ref2d2_tok = REF2D
133
133
  {
134
134
  r1, c1 = Utilities.cell_to_packed_rowcol(ref2d1_tok.text)
135
135
  r2, c2 = Utilities.cell_to_packed_rowcol(ref2d2_tok.text)
136
- ptg = PTGAREAR + RVA_DELTA[arg_type]
136
+ ptg = PTGAREAR + RVA_DELTA_AREA[arg_type]
137
137
  @rpn += [ptg, r1, r2, c1, c2].pack("Cv4")
138
138
  }
139
-
139
+ | LP expr[arg_type] RP
140
+ {
141
+ @rpn += [PTGPAREN].pack('C')
142
+ }
140
143
  | sheet1 = sheet
141
144
  {
142
145
  sheet2 = sheet1
143
146
  }
144
147
  ( COLON sheet2 = sheet )? BANG ref3d_ref2d=REF2D
145
148
  {
146
- ptg = PTGREF3DR + RVA_DELTA[arg_type]
147
- rpn_ref2d = ""
149
+ ptg = PTGREF3DR + RVA_DELTA_REF[arg_type]
148
150
  r1, c1 = Utilities.cell_to_packed_rowcol(ref3d_ref2d.text)
149
151
  rpn_ref2d = [0x0000, r1, c1].pack("v3")
150
152
  }
151
153
  ( COLON ref3d_ref2d2= REF2D
152
154
  {
153
- ptg = PTGAREA3DR + RVA_DELTA[arg_type]
155
+ ptg = PTGAREA3DR + RVA_DELTA_AREA[arg_type]
154
156
  r2, c2 = Utilities.cell_to_packed_rowcol(ref3d_ref2d2.text)
155
157
  rpn_ref2d = [0x0000, r1, r2, c1, c2].pack("v5")
156
158
  }
@@ -169,19 +171,17 @@ primary[arg_type]
169
171
  expr[arg_type] (SEMICOLON | COMMA)
170
172
  {
171
173
  @rpn += [PTGATTR, 0x08, 0].pack("C2v") # tAttrSkip
172
- pos1 = @rpn.length - 2
174
+ pos1 = @rpn.size - 2
173
175
 
174
- rem = @rpn.length - (pos0 + 2)
175
- @rpn = @rpn[0..pos0] + [pos1-pos0].pack("v") + @rpn[pos0+2, rem] # TODO Check for OBO
176
+ @rpn = @rpn[0...pos0] + [pos1-pos0].pack("v") + @rpn[(pos0+2)...(@rpn.size)]
176
177
  }
177
178
  expr[arg_type] RP
178
179
  {
179
180
  @rpn += [PTGATTR, 0x08, 3].pack("C2v") # tAttrSkip
180
181
  @rpn += [PTGFUNCVARR, 3, 1].pack("C2v") # 3 = nargs, 1 = IF func
181
- pos2 = @rpn.length
182
+ pos2 = @rpn.size
182
183
 
183
- rem = @rpn.length - (pos1 + 2)
184
- @rpn = @rpn[0..pos1] + [pos2-(pos1+2)-1].pack("v") + @rpn[pos1+2, rem] # TODO Check for OBO
184
+ @rpn = @rpn[0...pos1] + [pos2-(pos1+2)-1].pack("v") + @rpn[(pos1+2)...(@rpn.size)]
185
185
  }
186
186
  | FUNC_CHOOSE
187
187
  {
@@ -190,39 +190,39 @@ primary[arg_type]
190
190
  }
191
191
  LP expr["V"]
192
192
  {
193
- rpn_start = @rpn.length
194
- ref_markers = [@sheet_references.length]
193
+ rpn_start = @rpn.size
194
+ ref_markers = [@sheet_references.size]
195
195
  }
196
196
  (
197
197
  (SEMICOLON | COMMA)
198
- { mark = @rpn.length }
198
+ { mark = @rpn.size }
199
199
  (
200
200
  expr[arg_type]
201
201
  | { @rpn += [PTGMISSARG].pack("C") }
202
202
  )
203
203
  {
204
- rem = @rpn.length - mark
204
+ rem = @rpn.size - mark
205
205
  rpn_chunks << @rpn[mark, rem]
206
206
  ref_markers << @sheet_references.size
207
207
  }
208
208
  )*
209
209
  RP
210
210
  {
211
- @rpn = @rpn[0..rpn_start]
211
+ @rpn = @rpn[0...rpn_start]
212
212
  nc = rpn_chunks.length
213
213
  chunklens = rpn_chunks.collect {|c| c.length}
214
214
  skiplens = [0] * nc
215
- skiplens[-1] = 3
215
+ skiplens[nc-1] = 3
216
216
 
217
217
  (nc-1).downto(1) do |i|
218
218
  skiplens[i-1] = skiplens[i] + chunklens[i] + 4
219
219
  end
220
- jump_pos = [2 * nc + 2]
220
+ jump_pos = [2*nc + 2]
221
221
 
222
222
  (0...nc).each do |i|
223
- jump_pos.append(jump_pos[-1] + chunklens[ic] + 4)
223
+ jump_pos << (jump_pos.last + chunklens[i] + 4)
224
224
  end
225
- chunk_shift = 2 * nc + 6 # size of tAttrChoose
225
+ chunk_shift = 2*nc + 6 # size of tAttrChoose
226
226
 
227
227
  (0...nc).each do |i|
228
228
  (ref_markers[i]...ref_markers[i+1]).each do |r|
@@ -266,7 +266,7 @@ primary[arg_type]
266
266
  LP arg_count = expr_list[arg_type_list, min_argc, max_argc] RP
267
267
  {
268
268
  if (arg_count > max_argc) || (arg_count < min_argc)
269
- raise "#{arg_count} parameters for function: #{func_tok.text}"
269
+ raise "incorrect number #{arg_count} of parameters for function: #{func_tok.text}"
270
270
  end
271
271
 
272
272
  if xcall
@@ -275,47 +275,58 @@ primary[arg_type]
275
275
  elsif (min_argc == max_argc)
276
276
  func_ptg = PTGFUNCR + RVA_DELTA[func_type]
277
277
  @rpn += [func_ptg, opcode].pack("Cv")
278
- elsif (arg_count == 1) && (func_tok.text.upcase == "SUM")
278
+ elsif (arg_count == 1) && (func_tok.text.upcase === "SUM")
279
279
  @rpn += [PTGATTR, 0x10, 0].pack("CCv") # tAttrSum
280
280
  else
281
- func_ptg = PTGFUNCVARR + RVA_DELTA[func_type]
281
+ func_ptg = PTGFUNCVARR + RVA_DELTA[func_type]
282
282
  @rpn += [func_ptg, arg_count, opcode].pack("CCv")
283
283
  end
284
284
  }
285
- | LP expr[arg_type] RP
286
- {
287
- @rpn += [PTGPAREN].pack('C')
288
- }
289
285
  ;
290
-
291
286
 
287
+ // Process arguments to a function.
292
288
  expr_list[arg_type_list, min_argc, max_argc] returns [arg_cnt]
293
- @members{
294
- arg_cnt = 0
295
- arg_type = arg_type_list[arg_cnt]
289
+ @init
290
+ {
291
+ arg_cnt = 0
292
+
293
+ # Set these for processing first argument,
294
+ # it's simpler because first argument type can't be '...'
295
+ arg_type = arg_type_list.first
296
+
297
+ # need to check for '-' for a fn with no arguments
298
+ arg_cnt += 1 unless arg_type === '-'
296
299
  }
297
- : expr[arg_type] { arg_cnt += 1 }
298
- (
299
- {
300
- if arg_cnt < arg_type_list.size
301
- arg_type = arg_type_list[arg_cnt]
302
- else
303
- arg_type = arg_type_list[-1]
304
- end
305
- if arg_type == "+"
306
- arg_type = arg_type_list[-2]
307
- end
308
- }
309
- (SEMICOLON | COMMA)
310
- (
311
- expr[arg_type]
312
- | { @rpn += [PTGMISSARG].pack("B") }
313
- )
314
- { arg_cnt += 1 }
315
- )*
316
- |
300
+ :
301
+ (expr[arg_type]
302
+ (
303
+ (SEMICOLON | COMMA) { arg_cnt += 1 }
304
+ (
305
+ // *either* we find an argument after the comma/semicolon in which case process it...
306
+ expr[arg_type]
307
+ {
308
+ if arg_cnt - 2 < arg_type_list.size
309
+ arg_type = arg_type_list[arg_cnt - 2]
310
+ else
311
+ if arg_type_list.last === "..."
312
+ # e.g. "V R ..." arbitrary number of args of type R
313
+ # this will always be last element in arg_type_list
314
+ # 2nd to last element will provide type
315
+ arg_type = arg_type_list[arg_type_list.size - 2]
316
+ else
317
+ # Just read last element normally.
318
+ arg_type = arg_type_list[arg_cnt - 2]
319
+ end
320
+ end
321
+ }
322
+ // ... *or* we have a missing argument and need to insert a placeholder
323
+ | { @rpn += [PTGMISSARG].pack("C") }
324
+ )
325
+ )*
326
+ )
327
+ | // Some functions have no arguments e.g. pi()
317
328
  ;
318
-
329
+
319
330
  sheet returns[ref]
320
331
  : sheet_ref_name = NAME
321
332
  { ref = sheet_ref_name.text }
@@ -325,7 +336,7 @@ sheet returns[ref]
325
336
  { ref = sheet_ref_quote.text[1, len(sheet_ref_quote.text) - 1].replace("''", "'") }
326
337
  ;
327
338
 
328
-
339
+
329
340
  EQ: '=';
330
341
  LT: '<';
331
342
  GT: '>';
@@ -345,7 +356,7 @@ COMMA: ',';
345
356
  LP: '(';
346
357
  RP: ')';
347
358
  CONCAT: '&';
348
- PERCENT: '%';
359
+ PERCENT: '\%';
349
360
  POWER: '^';
350
361
  BANG: '!';
351
362
 
@@ -357,8 +368,11 @@ STR_CONST: '"' (~'"')+ '"';
357
368
  REF2D: '$'? ('A'..'I')? ('A'..'Z') '$'? DIGIT+;
358
369
  TRUE_CONST: ('T'|'t') ('R'|'r') ('U'|'u') ('E'|'e') ;
359
370
  FALSE_CONST: ('F'|'f') ('A'|'a') ('L'|'l') ('S'|'s') ('E'|'e') ;
360
- NAME: '\w[\.\w]*' ;
361
371
  QUOTENAME: '\'(?:[^\']|\'\')*\'';
362
372
  FUNC_IF: 'IF';
363
373
  FUNC_CHOOSE: 'CHOOSE';
364
374
 
375
+ fragment ALPHA: 'a'..'z' | 'A'..'Z';
376
+ NAME: ALPHA+ ;
377
+
378
+ WS: (' ')+ {skip()};
@@ -4,26 +4,28 @@ NUM_CONST=21
4
4
  PERCENT=16
5
5
  REF2D=22
6
6
  CONCAT=10
7
- RP=29
8
- LP=26
7
+ RP=25
8
+ LP=24
9
9
  INT_CONST=20
10
10
  STR_CONST=19
11
11
  POWER=15
12
12
  SUB=12
13
13
  FUNC_CHOOSE=30
14
- SEMICOLON=27
15
- BANG=24
14
+ SEMICOLON=28
15
+ BANG=26
16
16
  TRUE_CONST=17
17
17
  MUL=13
18
+ ALPHA=34
18
19
  COLON=23
19
20
  NAME=31
20
21
  FALSE_CONST=18
21
- COMMA=28
22
+ WS=35
23
+ COMMA=29
22
24
  GT=6
23
25
  DIGIT=33
24
26
  EQ=4
25
27
  DIV=14
26
- FUNC_IF=25
28
+ FUNC_IF=27
27
29
  QUOTENAME=32
28
30
  LE=9
29
31
  NE=5
@@ -5,7 +5,7 @@
5
5
  # Generated using ANTLR version: 3.2.1-SNAPSHOT Dec 18, 2009 04:29:28
6
6
  # Ruby runtime library version: 1.3.1
7
7
  # Input grammar file: ExcelFormula.g
8
- # Generated at: 2010-05-03 16:34:32
8
+ # Generated at: 2010-06-13 10:19:27
9
9
  #
10
10
 
11
11
  # ~~~> start load path setup
@@ -67,13 +67,13 @@ module ExcelFormula
67
67
 
68
68
  # define the token constants
69
69
  define_tokens(:GE => 8, :LT => 7, :NUM_CONST => 21, :PERCENT => 16,
70
- :REF2D => 22, :CONCAT => 10, :RP => 29, :LP => 26, :INT_CONST => 20,
70
+ :REF2D => 22, :CONCAT => 10, :RP => 25, :LP => 24, :INT_CONST => 20,
71
71
  :STR_CONST => 19, :POWER => 15, :SUB => 12, :FUNC_CHOOSE => 30,
72
- :SEMICOLON => 27, :BANG => 24, :TRUE_CONST => 17, :EOF => -1,
73
- :MUL => 13, :COLON => 23, :FALSE_CONST => 18, :NAME => 31,
74
- :COMMA => 28, :GT => 6, :DIGIT => 33, :DIV => 14, :EQ => 4,
75
- :FUNC_IF => 25, :QUOTENAME => 32, :LE => 9, :ADD => 11,
76
- :NE => 5)
72
+ :SEMICOLON => 28, :BANG => 26, :TRUE_CONST => 17, :EOF => -1,
73
+ :MUL => 13, :ALPHA => 34, :COLON => 23, :FALSE_CONST => 18,
74
+ :NAME => 31, :WS => 35, :COMMA => 29, :GT => 6, :DIGIT => 33,
75
+ :DIV => 14, :EQ => 4, :FUNC_IF => 27, :QUOTENAME => 32,
76
+ :LE => 9, :ADD => 11, :NE => 5)
77
77
 
78
78
  end
79
79
 
@@ -91,13 +91,14 @@ module ExcelFormula
91
91
  RULE_NAMES = ["EQ", "LT", "GT", "NE", "LE", "GE", "ADD", "SUB", "MUL",
92
92
  "DIV", "COLON", "SEMICOLON", "COMMA", "LP", "RP", "CONCAT",
93
93
  "PERCENT", "POWER", "BANG", "DIGIT", "INT_CONST", "NUM_CONST",
94
- "STR_CONST", "REF2D", "TRUE_CONST", "FALSE_CONST", "NAME",
95
- "QUOTENAME", "FUNC_IF", "FUNC_CHOOSE"].freeze
94
+ "STR_CONST", "REF2D", "TRUE_CONST", "FALSE_CONST", "QUOTENAME",
95
+ "FUNC_IF", "FUNC_CHOOSE", "ALPHA", "NAME", "WS"].freeze
96
96
  RULE_METHODS = [:eq!, :lt!, :gt!, :ne!, :le!, :ge!, :add!, :sub!, :mul!,
97
97
  :div!, :colon!, :semicolon!, :comma!, :lp!, :rp!, :concat!,
98
98
  :percent!, :power!, :bang!, :digit!, :int_const!, :num_const!,
99
99
  :str_const!, :ref_2_d!, :true_const!, :false_const!,
100
- :name!, :quotename!, :func_if!, :func_choose!].freeze
100
+ :quotename!, :func_if!, :func_choose!, :alpha!, :name!,
101
+ :ws!].freeze
101
102
 
102
103
 
103
104
  def initialize(input=nil, options = {})
@@ -117,7 +118,7 @@ module ExcelFormula
117
118
 
118
119
 
119
120
  # - - - - main rule block - - - -
120
- # at line 329:5: '='
121
+ # at line 340:5: '='
121
122
  match(?=)
122
123
 
123
124
 
@@ -141,7 +142,7 @@ module ExcelFormula
141
142
 
142
143
 
143
144
  # - - - - main rule block - - - -
144
- # at line 330:5: '<'
145
+ # at line 341:5: '<'
145
146
  match(?<)
146
147
 
147
148
 
@@ -165,7 +166,7 @@ module ExcelFormula
165
166
 
166
167
 
167
168
  # - - - - main rule block - - - -
168
- # at line 331:5: '>'
169
+ # at line 342:5: '>'
169
170
  match(?>)
170
171
 
171
172
 
@@ -189,7 +190,7 @@ module ExcelFormula
189
190
 
190
191
 
191
192
  # - - - - main rule block - - - -
192
- # at line 332:5: '<>'
193
+ # at line 343:5: '<>'
193
194
  match("<>")
194
195
 
195
196
 
@@ -213,7 +214,7 @@ module ExcelFormula
213
214
 
214
215
 
215
216
  # - - - - main rule block - - - -
216
- # at line 333:5: '<='
217
+ # at line 344:5: '<='
217
218
  match("<=")
218
219
 
219
220
 
@@ -237,7 +238,7 @@ module ExcelFormula
237
238
 
238
239
 
239
240
  # - - - - main rule block - - - -
240
- # at line 334:5: '>='
241
+ # at line 345:5: '>='
241
242
  match(">=")
242
243
 
243
244
 
@@ -261,7 +262,7 @@ module ExcelFormula
261
262
 
262
263
 
263
264
  # - - - - main rule block - - - -
264
- # at line 336:6: '+'
265
+ # at line 347:6: '+'
265
266
  match(?+)
266
267
 
267
268
 
@@ -285,7 +286,7 @@ module ExcelFormula
285
286
 
286
287
 
287
288
  # - - - - main rule block - - - -
288
- # at line 337:6: '-'
289
+ # at line 348:6: '-'
289
290
  match(?-)
290
291
 
291
292
 
@@ -309,7 +310,7 @@ module ExcelFormula
309
310
 
310
311
 
311
312
  # - - - - main rule block - - - -
312
- # at line 338:6: '*'
313
+ # at line 349:6: '*'
313
314
  match(?*)
314
315
 
315
316
 
@@ -333,7 +334,7 @@ module ExcelFormula
333
334
 
334
335
 
335
336
  # - - - - main rule block - - - -
336
- # at line 339:6: '/'
337
+ # at line 350:6: '/'
337
338
  match(?/)
338
339
 
339
340
 
@@ -357,7 +358,7 @@ module ExcelFormula
357
358
 
358
359
 
359
360
  # - - - - main rule block - - - -
360
- # at line 341:8: ':'
361
+ # at line 352:8: ':'
361
362
  match(?:)
362
363
 
363
364
 
@@ -381,7 +382,7 @@ module ExcelFormula
381
382
 
382
383
 
383
384
  # - - - - main rule block - - - -
384
- # at line 342:12: ';'
385
+ # at line 353:12: ';'
385
386
  match(?;)
386
387
 
387
388
 
@@ -405,7 +406,7 @@ module ExcelFormula
405
406
 
406
407
 
407
408
  # - - - - main rule block - - - -
408
- # at line 343:8: ','
409
+ # at line 354:8: ','
409
410
  match(?,)
410
411
 
411
412
 
@@ -429,7 +430,7 @@ module ExcelFormula
429
430
 
430
431
 
431
432
  # - - - - main rule block - - - -
432
- # at line 345:5: '('
433
+ # at line 356:5: '('
433
434
  match(?()
434
435
 
435
436
 
@@ -453,7 +454,7 @@ module ExcelFormula
453
454
 
454
455
 
455
456
  # - - - - main rule block - - - -
456
- # at line 346:5: ')'
457
+ # at line 357:5: ')'
457
458
  match(?))
458
459
 
459
460
 
@@ -477,7 +478,7 @@ module ExcelFormula
477
478
 
478
479
 
479
480
  # - - - - main rule block - - - -
480
- # at line 347:9: '&'
481
+ # at line 358:9: '&'
481
482
  match(?&)
482
483
 
483
484
 
@@ -501,8 +502,8 @@ module ExcelFormula
501
502
 
502
503
 
503
504
  # - - - - main rule block - - - -
504
- # at line 348:10: '%'
505
- match(?%)
505
+ # at line 359:10: '\\%'
506
+ match(?\%)
506
507
 
507
508
 
508
509
  @state.type = type
@@ -525,7 +526,7 @@ module ExcelFormula
525
526
 
526
527
 
527
528
  # - - - - main rule block - - - -
528
- # at line 349:8: '^'
529
+ # at line 360:8: '^'
529
530
  match(?^)
530
531
 
531
532
 
@@ -549,7 +550,7 @@ module ExcelFormula
549
550
 
550
551
 
551
552
  # - - - - main rule block - - - -
552
- # at line 350:7: '!'
553
+ # at line 361:7: '!'
553
554
  match(?!)
554
555
 
555
556
 
@@ -570,7 +571,7 @@ module ExcelFormula
570
571
 
571
572
 
572
573
  # - - - - main rule block - - - -
573
- # at line 352:17: '0' .. '9'
574
+ # at line 363:17: '0' .. '9'
574
575
  match_range(?0, ?9)
575
576
 
576
577
  ensure
@@ -590,8 +591,8 @@ module ExcelFormula
590
591
 
591
592
 
592
593
  # - - - - main rule block - - - -
593
- # at line 354:12: ( DIGIT )+
594
- # at file 354:12: ( DIGIT )+
594
+ # at line 365:12: ( DIGIT )+
595
+ # at file 365:12: ( DIGIT )+
595
596
  match_count_1 = 0
596
597
  loop do
597
598
  alt_1 = 2
@@ -603,7 +604,7 @@ module ExcelFormula
603
604
  end
604
605
  case alt_1
605
606
  when 1
606
- # at line 354:12: DIGIT
607
+ # at line 365:12: DIGIT
607
608
  digit!
608
609
 
609
610
  else
@@ -638,8 +639,8 @@ module ExcelFormula
638
639
 
639
640
 
640
641
  # - - - - main rule block - - - -
641
- # at line 355:12: ( DIGIT )* '.' ( DIGIT )+ ( ( 'E' | 'e' ) ( '+' | '-' )? ( DIGIT )+ )?
642
- # at line 355:12: ( DIGIT )*
642
+ # at line 366:12: ( DIGIT )* '.' ( DIGIT )+ ( ( 'E' | 'e' ) ( '+' | '-' )? ( DIGIT )+ )?
643
+ # at line 366:12: ( DIGIT )*
643
644
  loop do # decision 2
644
645
  alt_2 = 2
645
646
  look_2_0 = @input.peek(1)
@@ -650,7 +651,7 @@ module ExcelFormula
650
651
  end
651
652
  case alt_2
652
653
  when 1
653
- # at line 355:12: DIGIT
654
+ # at line 366:12: DIGIT
654
655
  digit!
655
656
 
656
657
  else
@@ -658,7 +659,7 @@ module ExcelFormula
658
659
  end
659
660
  end # loop for decision 2
660
661
  match(?.)
661
- # at file 355:23: ( DIGIT )+
662
+ # at file 366:23: ( DIGIT )+
662
663
  match_count_3 = 0
663
664
  loop do
664
665
  alt_3 = 2
@@ -670,7 +671,7 @@ module ExcelFormula
670
671
  end
671
672
  case alt_3
672
673
  when 1
673
- # at line 355:23: DIGIT
674
+ # at line 366:23: DIGIT
674
675
  digit!
675
676
 
676
677
  else
@@ -683,7 +684,7 @@ module ExcelFormula
683
684
  match_count_3 += 1
684
685
  end
685
686
 
686
- # at line 355:30: ( ( 'E' | 'e' ) ( '+' | '-' )? ( DIGIT )+ )?
687
+ # at line 366:30: ( ( 'E' | 'e' ) ( '+' | '-' )? ( DIGIT )+ )?
687
688
  alt_6 = 2
688
689
  look_6_0 = @input.peek(1)
689
690
 
@@ -692,7 +693,7 @@ module ExcelFormula
692
693
  end
693
694
  case alt_6
694
695
  when 1
695
- # at line 355:31: ( 'E' | 'e' ) ( '+' | '-' )? ( DIGIT )+
696
+ # at line 366:31: ( 'E' | 'e' ) ( '+' | '-' )? ( DIGIT )+
696
697
  if @input.peek(1) == ?E || @input.peek(1) == ?e
697
698
  @input.consume
698
699
  else
@@ -702,7 +703,7 @@ module ExcelFormula
702
703
  end
703
704
 
704
705
 
705
- # at line 355:41: ( '+' | '-' )?
706
+ # at line 366:41: ( '+' | '-' )?
706
707
  alt_4 = 2
707
708
  look_4_0 = @input.peek(1)
708
709
 
@@ -723,7 +724,7 @@ module ExcelFormula
723
724
 
724
725
 
725
726
  end
726
- # at file 355:52: ( DIGIT )+
727
+ # at file 366:52: ( DIGIT )+
727
728
  match_count_5 = 0
728
729
  loop do
729
730
  alt_5 = 2
@@ -735,7 +736,7 @@ module ExcelFormula
735
736
  end
736
737
  case alt_5
737
738
  when 1
738
- # at line 355:52: DIGIT
739
+ # at line 366:52: DIGIT
739
740
  digit!
740
741
 
741
742
  else
@@ -772,9 +773,9 @@ module ExcelFormula
772
773
 
773
774
 
774
775
  # - - - - main rule block - - - -
775
- # at line 356:12: '\"' (~ '\"' )+ '\"'
776
+ # at line 367:12: '\"' (~ '\"' )+ '\"'
776
777
  match(?")
777
- # at file 356:16: (~ '\"' )+
778
+ # at file 367:16: (~ '\"' )+
778
779
  match_count_7 = 0
779
780
  loop do
780
781
  alt_7 = 2
@@ -786,7 +787,7 @@ module ExcelFormula
786
787
  end
787
788
  case alt_7
788
789
  when 1
789
- # at line 356:17: ~ '\"'
790
+ # at line 367:17: ~ '\"'
790
791
  if @input.peek(1).between?(0x0000, ?!) || @input.peek(1).between?(?#, 0x00FF)
791
792
  @input.consume
792
793
  else
@@ -830,8 +831,8 @@ module ExcelFormula
830
831
 
831
832
 
832
833
  # - - - - main rule block - - - -
833
- # at line 357:8: ( '$' )? ( 'A' .. 'I' )? ( 'A' .. 'Z' ) ( '$' )? ( DIGIT )+
834
- # at line 357:8: ( '$' )?
834
+ # at line 368:8: ( '$' )? ( 'A' .. 'I' )? ( 'A' .. 'Z' ) ( '$' )? ( DIGIT )+
835
+ # at line 368:8: ( '$' )?
835
836
  alt_8 = 2
836
837
  look_8_0 = @input.peek(1)
837
838
 
@@ -840,11 +841,11 @@ module ExcelFormula
840
841
  end
841
842
  case alt_8
842
843
  when 1
843
- # at line 357:8: '$'
844
+ # at line 368:8: '$'
844
845
  match(?$)
845
846
 
846
847
  end
847
- # at line 357:13: ( 'A' .. 'I' )?
848
+ # at line 368:13: ( 'A' .. 'I' )?
848
849
  alt_9 = 2
849
850
  look_9_0 = @input.peek(1)
850
851
 
@@ -857,15 +858,15 @@ module ExcelFormula
857
858
  end
858
859
  case alt_9
859
860
  when 1
860
- # at line 357:14: 'A' .. 'I'
861
+ # at line 368:14: 'A' .. 'I'
861
862
  match_range(?A, ?I)
862
863
 
863
864
  end
864
- # at line 357:25: ( 'A' .. 'Z' )
865
- # at line 357:26: 'A' .. 'Z'
865
+ # at line 368:25: ( 'A' .. 'Z' )
866
+ # at line 368:26: 'A' .. 'Z'
866
867
  match_range(?A, ?Z)
867
868
 
868
- # at line 357:36: ( '$' )?
869
+ # at line 368:36: ( '$' )?
869
870
  alt_10 = 2
870
871
  look_10_0 = @input.peek(1)
871
872
 
@@ -874,11 +875,11 @@ module ExcelFormula
874
875
  end
875
876
  case alt_10
876
877
  when 1
877
- # at line 357:36: '$'
878
+ # at line 368:36: '$'
878
879
  match(?$)
879
880
 
880
881
  end
881
- # at file 357:41: ( DIGIT )+
882
+ # at file 368:41: ( DIGIT )+
882
883
  match_count_11 = 0
883
884
  loop do
884
885
  alt_11 = 2
@@ -890,7 +891,7 @@ module ExcelFormula
890
891
  end
891
892
  case alt_11
892
893
  when 1
893
- # at line 357:41: DIGIT
894
+ # at line 368:41: DIGIT
894
895
  digit!
895
896
 
896
897
  else
@@ -925,7 +926,7 @@ module ExcelFormula
925
926
 
926
927
 
927
928
  # - - - - main rule block - - - -
928
- # at line 358:13: ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' )
929
+ # at line 369:13: ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' )
929
930
  if @input.peek(1) == ?T || @input.peek(1) == ?t
930
931
  @input.consume
931
932
  else
@@ -984,7 +985,7 @@ module ExcelFormula
984
985
 
985
986
 
986
987
  # - - - - main rule block - - - -
987
- # at line 359:14: ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' )
988
+ # at line 370:14: ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' )
988
989
  if @input.peek(1) == ?F || @input.peek(1) == ?f
989
990
  @input.consume
990
991
  else
@@ -1041,19 +1042,19 @@ module ExcelFormula
1041
1042
 
1042
1043
  end
1043
1044
 
1044
- # lexer rule name! (NAME)
1045
+ # lexer rule quotename! (QUOTENAME)
1045
1046
  # (in ExcelFormula.g)
1046
- def name!
1047
+ def quotename!
1047
1048
  # -> uncomment the next line to manually enable rule tracing
1048
1049
  # trace_in(__method__, 27)
1049
1050
 
1050
- type = NAME
1051
+ type = QUOTENAME
1051
1052
  channel = ANTLR3::DEFAULT_CHANNEL
1052
1053
 
1053
1054
 
1054
1055
  # - - - - main rule block - - - -
1055
- # at line 360:7: '\\w[\\.\\w]*'
1056
- match("w[.w]*")
1056
+ # at line 371:12: '\\'(?:[^\\']|\\'\\')*\\''
1057
+ match("'(?:[^']|'')*'")
1057
1058
 
1058
1059
 
1059
1060
  @state.type = type
@@ -1065,19 +1066,19 @@ module ExcelFormula
1065
1066
 
1066
1067
  end
1067
1068
 
1068
- # lexer rule quotename! (QUOTENAME)
1069
+ # lexer rule func_if! (FUNC_IF)
1069
1070
  # (in ExcelFormula.g)
1070
- def quotename!
1071
+ def func_if!
1071
1072
  # -> uncomment the next line to manually enable rule tracing
1072
1073
  # trace_in(__method__, 28)
1073
1074
 
1074
- type = QUOTENAME
1075
+ type = FUNC_IF
1075
1076
  channel = ANTLR3::DEFAULT_CHANNEL
1076
1077
 
1077
1078
 
1078
1079
  # - - - - main rule block - - - -
1079
- # at line 361:12: '\\'(?:[^\\']|\\'\\')*\\''
1080
- match("'(?:[^']|'')*'")
1080
+ # at line 372:10: 'IF'
1081
+ match("IF")
1081
1082
 
1082
1083
 
1083
1084
  @state.type = type
@@ -1089,19 +1090,19 @@ module ExcelFormula
1089
1090
 
1090
1091
  end
1091
1092
 
1092
- # lexer rule func_if! (FUNC_IF)
1093
+ # lexer rule func_choose! (FUNC_CHOOSE)
1093
1094
  # (in ExcelFormula.g)
1094
- def func_if!
1095
+ def func_choose!
1095
1096
  # -> uncomment the next line to manually enable rule tracing
1096
1097
  # trace_in(__method__, 29)
1097
1098
 
1098
- type = FUNC_IF
1099
+ type = FUNC_CHOOSE
1099
1100
  channel = ANTLR3::DEFAULT_CHANNEL
1100
1101
 
1101
1102
 
1102
1103
  # - - - - main rule block - - - -
1103
- # at line 362:10: 'IF'
1104
- match("IF")
1104
+ # at line 373:14: 'CHOOSE'
1105
+ match("CHOOSE")
1105
1106
 
1106
1107
 
1107
1108
  @state.type = type
@@ -1113,19 +1114,68 @@ module ExcelFormula
1113
1114
 
1114
1115
  end
1115
1116
 
1116
- # lexer rule func_choose! (FUNC_CHOOSE)
1117
+ # lexer rule alpha! (ALPHA)
1117
1118
  # (in ExcelFormula.g)
1118
- def func_choose!
1119
+ def alpha!
1119
1120
  # -> uncomment the next line to manually enable rule tracing
1120
1121
  # trace_in(__method__, 30)
1121
1122
 
1122
- type = FUNC_CHOOSE
1123
+
1124
+ # - - - - main rule block - - - -
1125
+ # at line
1126
+ if @input.peek(1).between?(?A, ?Z) || @input.peek(1).between?(?a, ?z)
1127
+ @input.consume
1128
+ else
1129
+ mse = MismatchedSet(nil)
1130
+ recover(mse)
1131
+ raise mse
1132
+ end
1133
+
1134
+
1135
+
1136
+ ensure
1137
+ # -> uncomment the next line to manually enable rule tracing
1138
+ # trace_out(__method__, 30)
1139
+
1140
+ end
1141
+
1142
+ # lexer rule name! (NAME)
1143
+ # (in ExcelFormula.g)
1144
+ def name!
1145
+ # -> uncomment the next line to manually enable rule tracing
1146
+ # trace_in(__method__, 31)
1147
+
1148
+ type = NAME
1123
1149
  channel = ANTLR3::DEFAULT_CHANNEL
1124
1150
 
1125
1151
 
1126
1152
  # - - - - main rule block - - - -
1127
- # at line 363:14: 'CHOOSE'
1128
- match("CHOOSE")
1153
+ # at line 376:7: ( ALPHA )+
1154
+ # at file 376:7: ( ALPHA )+
1155
+ match_count_12 = 0
1156
+ loop do
1157
+ alt_12 = 2
1158
+ look_12_0 = @input.peek(1)
1159
+
1160
+ if (look_12_0.between?(?A, ?Z) || look_12_0.between?(?a, ?z))
1161
+ alt_12 = 1
1162
+
1163
+ end
1164
+ case alt_12
1165
+ when 1
1166
+ # at line 376:7: ALPHA
1167
+ alpha!
1168
+
1169
+ else
1170
+ match_count_12 > 0 and break
1171
+ eee = EarlyExit(12)
1172
+
1173
+
1174
+ raise eee
1175
+ end
1176
+ match_count_12 += 1
1177
+ end
1178
+
1129
1179
 
1130
1180
 
1131
1181
  @state.type = type
@@ -1133,7 +1183,58 @@ module ExcelFormula
1133
1183
 
1134
1184
  ensure
1135
1185
  # -> uncomment the next line to manually enable rule tracing
1136
- # trace_out(__method__, 30)
1186
+ # trace_out(__method__, 31)
1187
+
1188
+ end
1189
+
1190
+ # lexer rule ws! (WS)
1191
+ # (in ExcelFormula.g)
1192
+ def ws!
1193
+ # -> uncomment the next line to manually enable rule tracing
1194
+ # trace_in(__method__, 32)
1195
+
1196
+ type = WS
1197
+ channel = ANTLR3::DEFAULT_CHANNEL
1198
+
1199
+
1200
+ # - - - - main rule block - - - -
1201
+ # at line 378:5: ( ' ' )+
1202
+ # at file 378:5: ( ' ' )+
1203
+ match_count_13 = 0
1204
+ loop do
1205
+ alt_13 = 2
1206
+ look_13_0 = @input.peek(1)
1207
+
1208
+ if (look_13_0 == ?\s)
1209
+ alt_13 = 1
1210
+
1211
+ end
1212
+ case alt_13
1213
+ when 1
1214
+ # at line 378:6: ' '
1215
+ match(?\s)
1216
+
1217
+ else
1218
+ match_count_13 > 0 and break
1219
+ eee = EarlyExit(13)
1220
+
1221
+
1222
+ raise eee
1223
+ end
1224
+ match_count_13 += 1
1225
+ end
1226
+
1227
+ # --> action
1228
+ skip()
1229
+ # <-- action
1230
+
1231
+
1232
+ @state.type = type
1233
+ @state.channel = channel
1234
+
1235
+ ensure
1236
+ # -> uncomment the next line to manually enable rule tracing
1237
+ # trace_out(__method__, 32)
1137
1238
 
1138
1239
  end
1139
1240
 
@@ -1145,10 +1246,10 @@ module ExcelFormula
1145
1246
  # but instead use the next_token method, which will
1146
1247
  # build and emit the actual next token
1147
1248
  def token!
1148
- # at line 1:8: ( EQ | LT | GT | NE | LE | GE | ADD | SUB | MUL | DIV | COLON | SEMICOLON | COMMA | LP | RP | CONCAT | PERCENT | POWER | BANG | INT_CONST | NUM_CONST | STR_CONST | REF2D | TRUE_CONST | FALSE_CONST | NAME | QUOTENAME | FUNC_IF | FUNC_CHOOSE )
1149
- alt_12 = 29
1150
- alt_12 = @dfa12.predict(@input)
1151
- case alt_12
1249
+ # at line 1:8: ( EQ | LT | GT | NE | LE | GE | ADD | SUB | MUL | DIV | COLON | SEMICOLON | COMMA | LP | RP | CONCAT | PERCENT | POWER | BANG | INT_CONST | NUM_CONST | STR_CONST | REF2D | TRUE_CONST | FALSE_CONST | QUOTENAME | FUNC_IF | FUNC_CHOOSE | NAME | WS )
1250
+ alt_14 = 30
1251
+ alt_14 = @dfa14.predict(@input)
1252
+ case alt_14
1152
1253
  when 1
1153
1254
  # at line 1:10: EQ
1154
1255
  eq!
@@ -1250,50 +1351,60 @@ module ExcelFormula
1250
1351
  false_const!
1251
1352
 
1252
1353
  when 26
1253
- # at line 1:157: NAME
1254
- name!
1354
+ # at line 1:157: QUOTENAME
1355
+ quotename!
1255
1356
 
1256
1357
  when 27
1257
- # at line 1:162: QUOTENAME
1258
- quotename!
1358
+ # at line 1:167: FUNC_IF
1359
+ func_if!
1259
1360
 
1260
1361
  when 28
1261
- # at line 1:172: FUNC_IF
1262
- func_if!
1362
+ # at line 1:175: FUNC_CHOOSE
1363
+ func_choose!
1263
1364
 
1264
1365
  when 29
1265
- # at line 1:180: FUNC_CHOOSE
1266
- func_choose!
1366
+ # at line 1:187: NAME
1367
+ name!
1368
+
1369
+ when 30
1370
+ # at line 1:192: WS
1371
+ ws!
1267
1372
 
1268
1373
  end
1269
1374
  end
1270
1375
 
1271
1376
 
1272
1377
  # - - - - - - - - - - DFA definitions - - - - - - - - - - -
1273
- class DFA12 < ANTLR3::DFA
1274
- EOT = unpack(2, -1, 1, 31, 1, 33, 13, -1, 1, 34, 18, -1, 1, 38, 3,
1275
- -1)
1276
- EOF = unpack(40, -1)
1277
- MIN = unpack(1, 0, 1, -1, 2, 61, 13, -1, 1, 46, 3, -1, 2, 36, 1, -1,
1278
- 1, 36, 3, -1, 1, 36, 6, -1, 3, 36, 2, -1)
1279
- MAX = unpack(1, 116, 1, -1, 1, 62, 1, 61, 13, -1, 1, 57, 3, -1, 1,
1280
- 97, 1, 114, 1, -1, 1, 90, 3, -1, 1, 90, 6, -1, 1, 108,
1281
- 1, 57, 1, 79, 2, -1)
1378
+ class DFA14 < ANTLR3::DFA
1379
+ EOT = unpack(2, -1, 1, 34, 1, 36, 13, -1, 1, 37, 3, -1, 6, 30, 1,
1380
+ -1, 2, 30, 8, -1, 3, 30, 1, 45, 3, 30, 1, -1, 2, 30,
1381
+ 1, 51, 1, 30, 1, 53, 1, -1, 1, 30, 1, -1, 1, 55, 1, -1)
1382
+ EOF = unpack(56, -1)
1383
+ MIN = unpack(1, 32, 1, -1, 2, 61, 13, -1, 1, 46, 3, -1, 3, 36, 1,
1384
+ 82, 1, 36, 1, 65, 1, -1, 2, 36, 8, -1, 1, 36, 1, 76,
1385
+ 1, 85, 2, 36, 1, 83, 1, 69, 1, -1, 1, 79, 1, 69, 1, 65,
1386
+ 1, 83, 1, 65, 1, -1, 1, 69, 1, -1, 1, 65, 1, -1)
1387
+ MAX = unpack(1, 122, 1, -1, 1, 62, 1, 61, 13, -1, 1, 57, 3, -1, 1,
1388
+ 97, 1, 114, 1, 57, 1, 114, 1, 90, 1, 97, 1, -1, 2, 90,
1389
+ 8, -1, 2, 108, 1, 117, 1, 122, 1, 79, 1, 115, 1, 101,
1390
+ 1, -1, 1, 79, 1, 101, 1, 122, 1, 83, 1, 122, 1, -1, 1,
1391
+ 69, 1, -1, 1, 122, 1, -1)
1282
1392
  ACCEPT = unpack(1, -1, 1, 1, 2, -1, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11,
1283
1393
  1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1,
1284
- 19, 1, -1, 1, 21, 1, 22, 1, 23, 2, -1, 1, 24, 1, -1,
1285
- 1, 25, 1, 26, 1, 27, 1, -1, 1, 4, 1, 5, 1, 2, 1, 6,
1286
- 1, 3, 1, 20, 3, -1, 1, 28, 1, 29)
1287
- SPECIAL = unpack(40, -1)
1394
+ 19, 1, -1, 1, 21, 1, 22, 1, 23, 6, -1, 1, 26, 2, -1,
1395
+ 1, 29, 1, 30, 1, 4, 1, 5, 1, 2, 1, 6, 1, 3, 1, 20,
1396
+ 7, -1, 1, 27, 5, -1, 1, 24, 1, -1, 1, 25, 1, -1, 1,
1397
+ 28)
1398
+ SPECIAL = unpack(56, -1)
1288
1399
  TRANSITION = [
1289
- unpack(1, 26, 32, -1, 1, 16, 1, 19, 1, -1, 1, 20, 1, 14, 1, 13,
1290
- 1, 27, 1, 11, 1, 12, 1, 6, 1, 4, 1, 10, 1, 5, 1, 18, 1, 7,
1291
- 10, 17, 1, 8, 1, 9, 1, 2, 1, 1, 1, 3, 2, -1, 2, 20, 1, 28,
1292
- 2, 20, 1, 21, 2, 20, 1, 24, 10, 20, 1, 22, 6, 20, 3, -1,
1293
- 1, 15, 7, -1, 1, 25, 13, -1, 1, 23),
1400
+ unpack(1, 31, 1, 16, 1, 19, 1, -1, 1, 20, 1, 14, 1, 13, 1, 27, 1,
1401
+ 11, 1, 12, 1, 6, 1, 4, 1, 10, 1, 5, 1, 18, 1, 7, 10, 17,
1402
+ 1, 8, 1, 9, 1, 2, 1, 1, 1, 3, 2, -1, 2, 29, 1, 28, 2, 29,
1403
+ 1, 21, 2, 29, 1, 25, 10, 23, 1, 22, 6, 23, 3, -1, 1, 15,
1404
+ 2, -1, 5, 30, 1, 26, 13, 30, 1, 24, 6, 30),
1294
1405
  unpack(),
1295
- unpack(1, 30, 1, 29),
1296
- unpack(1, 32),
1406
+ unpack(1, 33, 1, 32),
1407
+ unpack(1, 35),
1297
1408
  unpack(),
1298
1409
  unpack(),
1299
1410
  unpack(),
@@ -1311,24 +1422,40 @@ module ExcelFormula
1311
1422
  unpack(),
1312
1423
  unpack(),
1313
1424
  unpack(),
1314
- unpack(1, 20, 11, -1, 10, 20, 7, -1, 1, 35, 25, 20, 6, -1, 1, 25),
1315
- unpack(1, 20, 11, -1, 10, 20, 24, -1, 1, 23, 31, -1, 1, 23),
1425
+ unpack(1, 20, 11, -1, 10, 20, 7, -1, 1, 38, 25, 23, 6, -1, 1, 39),
1426
+ unpack(1, 20, 11, -1, 10, 20, 24, -1, 1, 40, 31, -1, 1, 40),
1427
+ unpack(1, 20, 11, -1, 10, 20),
1428
+ unpack(1, 40, 31, -1, 1, 40),
1429
+ unpack(1, 20, 11, -1, 10, 20, 7, -1, 5, 23, 1, 41, 20, 23),
1430
+ unpack(1, 39, 31, -1, 1, 39),
1316
1431
  unpack(),
1317
- unpack(1, 20, 11, -1, 10, 20, 7, -1, 5, 20, 1, 36, 20, 20),
1432
+ unpack(1, 20, 11, -1, 10, 20, 7, -1, 7, 23, 1, 42, 18, 23),
1433
+ unpack(1, 20, 11, -1, 10, 20, 7, -1, 26, 23),
1318
1434
  unpack(),
1319
1435
  unpack(),
1320
1436
  unpack(),
1321
- unpack(1, 20, 11, -1, 10, 20, 7, -1, 7, 20, 1, 37, 18, 20),
1322
1437
  unpack(),
1323
1438
  unpack(),
1324
1439
  unpack(),
1325
1440
  unpack(),
1326
1441
  unpack(),
1442
+ unpack(1, 20, 11, -1, 10, 20, 18, -1, 1, 43, 31, -1, 1, 43),
1443
+ unpack(1, 43, 31, -1, 1, 43),
1444
+ unpack(1, 44, 31, -1, 1, 44),
1445
+ unpack(1, 20, 11, -1, 10, 20, 7, -1, 26, 30, 6, -1, 26, 30),
1446
+ unpack(1, 20, 11, -1, 10, 20, 21, -1, 1, 46),
1447
+ unpack(1, 47, 31, -1, 1, 47),
1448
+ unpack(1, 48, 31, -1, 1, 48),
1327
1449
  unpack(),
1328
- unpack(1, 20, 11, -1, 10, 20, 18, -1, 1, 25, 31, -1, 1, 25),
1329
- unpack(1, 20, 11, -1, 10, 20),
1330
- unpack(1, 20, 11, -1, 10, 20, 21, -1, 1, 39),
1450
+ unpack(1, 49),
1451
+ unpack(1, 50, 31, -1, 1, 50),
1452
+ unpack(26, 30, 6, -1, 26, 30),
1453
+ unpack(1, 52),
1454
+ unpack(26, 30, 6, -1, 26, 30),
1455
+ unpack(),
1456
+ unpack(1, 54),
1331
1457
  unpack(),
1458
+ unpack(26, 30, 6, -1, 26, 30),
1332
1459
  unpack()
1333
1460
  ].freeze
1334
1461
 
@@ -1338,12 +1465,12 @@ module ExcelFormula
1338
1465
  end
1339
1466
  end
1340
1467
 
1341
- @decision = 12
1468
+ @decision = 14
1342
1469
 
1343
1470
 
1344
1471
  def description
1345
1472
  <<-'__dfa_description__'.strip!
1346
- 1:1: Tokens : ( EQ | LT | GT | NE | LE | GE | ADD | SUB | MUL | DIV | COLON | SEMICOLON | COMMA | LP | RP | CONCAT | PERCENT | POWER | BANG | INT_CONST | NUM_CONST | STR_CONST | REF2D | TRUE_CONST | FALSE_CONST | NAME | QUOTENAME | FUNC_IF | FUNC_CHOOSE );
1473
+ 1:1: Tokens : ( EQ | LT | GT | NE | LE | GE | ADD | SUB | MUL | DIV | COLON | SEMICOLON | COMMA | LP | RP | CONCAT | PERCENT | POWER | BANG | INT_CONST | NUM_CONST | STR_CONST | REF2D | TRUE_CONST | FALSE_CONST | QUOTENAME | FUNC_IF | FUNC_CHOOSE | NAME | WS );
1347
1474
  __dfa_description__
1348
1475
  end
1349
1476
  end
@@ -1353,7 +1480,7 @@ module ExcelFormula
1353
1480
 
1354
1481
  def initialize_dfas
1355
1482
  super rescue nil
1356
- @dfa12 = DFA12.new(self, 12)
1483
+ @dfa14 = DFA14.new(self, 14)
1357
1484
 
1358
1485
  end
1359
1486
  end # class Lexer < ANTLR3::Lexer