surpass 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.bnsignore +26 -0
- data/Rakefile +9 -0
- data/lib/surpass.rb +4 -1
- data/lib/surpass/ExcelFormula.g +74 -60
- data/lib/surpass/ExcelFormula.tokens +8 -6
- data/lib/surpass/ExcelFormulaLexer.rb +250 -123
- data/lib/surpass/ExcelFormulaParser.rb +321 -264
- data/lib/surpass/excel_magic.rb +1015 -1012
- data/lib/surpass/formula.rb +1 -0
- data/lib/surpass/row.rb +8 -0
- metadata +6 -9
- data/debug-examples/formula-cell.bin +0 -0
- data/debug-examples/formula-cell.rb +0 -14
- data/debug-examples/formula-record.bin +0 -0
- data/debug-examples/formula-record.rb +0 -15
data/.bnsignore
ADDED
@@ -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
|
data/lib/surpass.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Surpass
|
2
2
|
|
3
3
|
# :stopdoc:
|
4
|
-
VERSION = '0.0
|
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
|
|
data/lib/surpass/ExcelFormula.g
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
grammar ExcelFormula;
|
2
2
|
|
3
3
|
options {
|
4
|
-
|
5
|
-
|
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
|
-
:
|
78
|
+
: prec4_expr[arg_type]
|
79
79
|
(
|
80
80
|
(
|
81
81
|
POWER { op = [PTGPOWER].pack('C') }
|
82
82
|
)
|
83
|
-
|
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 +
|
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 +
|
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 +
|
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 +
|
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.
|
174
|
+
pos1 = @rpn.size - 2
|
173
175
|
|
174
|
-
|
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.
|
182
|
+
pos2 = @rpn.size
|
182
183
|
|
183
|
-
|
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.
|
194
|
-
ref_markers = [@sheet_references.
|
193
|
+
rpn_start = @rpn.size
|
194
|
+
ref_markers = [@sheet_references.size]
|
195
195
|
}
|
196
196
|
(
|
197
197
|
(SEMICOLON | COMMA)
|
198
|
-
{ mark = @rpn.
|
198
|
+
{ mark = @rpn.size }
|
199
199
|
(
|
200
200
|
expr[arg_type]
|
201
201
|
| { @rpn += [PTGMISSARG].pack("C") }
|
202
202
|
)
|
203
203
|
{
|
204
|
-
rem = @rpn.
|
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
|
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
|
220
|
+
jump_pos = [2*nc + 2]
|
221
221
|
|
222
222
|
(0...nc).each do |i|
|
223
|
-
jump_pos
|
223
|
+
jump_pos << (jump_pos.last + chunklens[i] + 4)
|
224
224
|
end
|
225
|
-
chunk_shift = 2
|
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
|
278
|
+
elsif (arg_count == 1) && (func_tok.text.upcase === "SUM")
|
279
279
|
@rpn += [PTGATTR, 0x10, 0].pack("CCv") # tAttrSum
|
280
280
|
else
|
281
|
-
|
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
|
-
@
|
294
|
-
|
295
|
-
|
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
|
-
:
|
298
|
-
(
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
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=
|
8
|
-
LP=
|
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=
|
15
|
-
BANG=
|
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
|
-
|
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=
|
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-
|
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 =>
|
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 =>
|
73
|
-
:MUL => 13, :
|
74
|
-
:
|
75
|
-
:
|
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", "
|
95
|
-
"
|
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
|
-
:
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
594
|
-
# at file
|
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
|
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
|
642
|
-
# at line
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
776
|
+
# at line 367:12: '\"' (~ '\"' )+ '\"'
|
776
777
|
match(?")
|
777
|
-
# at file
|
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
|
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
|
834
|
-
# at line
|
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
|
844
|
+
# at line 368:8: '$'
|
844
845
|
match(?$)
|
845
846
|
|
846
847
|
end
|
847
|
-
# at line
|
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
|
861
|
+
# at line 368:14: 'A' .. 'I'
|
861
862
|
match_range(?A, ?I)
|
862
863
|
|
863
864
|
end
|
864
|
-
# at line
|
865
|
-
# at line
|
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
|
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
|
878
|
+
# at line 368:36: '$'
|
878
879
|
match(?$)
|
879
880
|
|
880
881
|
end
|
881
|
-
# at file
|
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
|
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
|
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
|
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
|
1045
|
+
# lexer rule quotename! (QUOTENAME)
|
1045
1046
|
# (in ExcelFormula.g)
|
1046
|
-
def
|
1047
|
+
def quotename!
|
1047
1048
|
# -> uncomment the next line to manually enable rule tracing
|
1048
1049
|
# trace_in(__method__, 27)
|
1049
1050
|
|
1050
|
-
type =
|
1051
|
+
type = QUOTENAME
|
1051
1052
|
channel = ANTLR3::DEFAULT_CHANNEL
|
1052
1053
|
|
1053
1054
|
|
1054
1055
|
# - - - - main rule block - - - -
|
1055
|
-
# at line
|
1056
|
-
match("
|
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
|
1069
|
+
# lexer rule func_if! (FUNC_IF)
|
1069
1070
|
# (in ExcelFormula.g)
|
1070
|
-
def
|
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 =
|
1075
|
+
type = FUNC_IF
|
1075
1076
|
channel = ANTLR3::DEFAULT_CHANNEL
|
1076
1077
|
|
1077
1078
|
|
1078
1079
|
# - - - - main rule block - - - -
|
1079
|
-
# at line
|
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
|
1093
|
+
# lexer rule func_choose! (FUNC_CHOOSE)
|
1093
1094
|
# (in ExcelFormula.g)
|
1094
|
-
def
|
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 =
|
1099
|
+
type = FUNC_CHOOSE
|
1099
1100
|
channel = ANTLR3::DEFAULT_CHANNEL
|
1100
1101
|
|
1101
1102
|
|
1102
1103
|
# - - - - main rule block - - - -
|
1103
|
-
# at line
|
1104
|
-
match("
|
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
|
1117
|
+
# lexer rule alpha! (ALPHA)
|
1117
1118
|
# (in ExcelFormula.g)
|
1118
|
-
def
|
1119
|
+
def alpha!
|
1119
1120
|
# -> uncomment the next line to manually enable rule tracing
|
1120
1121
|
# trace_in(__method__, 30)
|
1121
1122
|
|
1122
|
-
|
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
|
1128
|
-
|
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__,
|
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 |
|
1149
|
-
|
1150
|
-
|
1151
|
-
case
|
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:
|
1254
|
-
|
1354
|
+
# at line 1:157: QUOTENAME
|
1355
|
+
quotename!
|
1255
1356
|
|
1256
1357
|
when 27
|
1257
|
-
# at line 1:
|
1258
|
-
|
1358
|
+
# at line 1:167: FUNC_IF
|
1359
|
+
func_if!
|
1259
1360
|
|
1260
1361
|
when 28
|
1261
|
-
# at line 1:
|
1262
|
-
|
1362
|
+
# at line 1:175: FUNC_CHOOSE
|
1363
|
+
func_choose!
|
1263
1364
|
|
1264
1365
|
when 29
|
1265
|
-
# at line 1:
|
1266
|
-
|
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
|
1274
|
-
EOT = unpack(2, -1, 1,
|
1275
|
-
-1
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
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,
|
1285
|
-
1,
|
1286
|
-
1,
|
1287
|
-
|
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,
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
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,
|
1296
|
-
unpack(1,
|
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,
|
1315
|
-
unpack(1, 20, 11, -1, 10, 20, 24, -1, 1,
|
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,
|
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,
|
1329
|
-
unpack(1,
|
1330
|
-
unpack(
|
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 =
|
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 |
|
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
|
-
@
|
1483
|
+
@dfa14 = DFA14.new(self, 14)
|
1357
1484
|
|
1358
1485
|
end
|
1359
1486
|
end # class Lexer < ANTLR3::Lexer
|