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.
- 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
|