csv_plus_plus 0.0.5 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +1 -0
- data/lib/csv_plus_plus/cell.rb +24 -8
- data/lib/csv_plus_plus/cli.rb +29 -16
- data/lib/csv_plus_plus/cli_flag.rb +10 -2
- data/lib/csv_plus_plus/code_section.rb +55 -3
- data/lib/csv_plus_plus/color.rb +19 -5
- data/lib/csv_plus_plus/google_options.rb +6 -2
- data/lib/csv_plus_plus/graph.rb +0 -1
- data/lib/csv_plus_plus/language/ast_builder.rb +68 -0
- data/lib/csv_plus_plus/language/benchmarked_compiler.rb +65 -0
- data/lib/csv_plus_plus/language/builtins.rb +46 -0
- data/lib/csv_plus_plus/language/cell_value.tab.rb +106 -134
- data/lib/csv_plus_plus/language/code_section.tab.rb +163 -192
- data/lib/csv_plus_plus/language/compiler.rb +75 -92
- data/lib/csv_plus_plus/language/entities/boolean.rb +3 -2
- data/lib/csv_plus_plus/language/entities/cell_reference.rb +10 -3
- data/lib/csv_plus_plus/language/entities/entity.rb +20 -8
- data/lib/csv_plus_plus/language/entities/function.rb +6 -4
- data/lib/csv_plus_plus/language/entities/function_call.rb +17 -5
- data/lib/csv_plus_plus/language/entities/number.rb +6 -4
- data/lib/csv_plus_plus/language/entities/runtime_value.rb +9 -8
- data/lib/csv_plus_plus/language/entities/string.rb +6 -4
- data/lib/csv_plus_plus/language/references.rb +22 -5
- data/lib/csv_plus_plus/language/runtime.rb +80 -22
- data/lib/csv_plus_plus/language/scope.rb +34 -39
- data/lib/csv_plus_plus/language/syntax_error.rb +10 -5
- data/lib/csv_plus_plus/lexer/lexer.rb +27 -13
- data/lib/csv_plus_plus/lexer/tokenizer.rb +35 -11
- data/lib/csv_plus_plus/modifier.rb +38 -18
- data/lib/csv_plus_plus/modifier.tab.rb +2 -2
- data/lib/csv_plus_plus/options.rb +20 -2
- data/lib/csv_plus_plus/row.rb +15 -4
- data/lib/csv_plus_plus/template.rb +26 -6
- data/lib/csv_plus_plus/version.rb +1 -1
- data/lib/csv_plus_plus/writer/excel.rb +2 -9
- data/lib/csv_plus_plus/writer/file_backer_upper.rb +22 -20
- data/lib/csv_plus_plus/writer/google_sheet_builder.rb +8 -10
- data/lib/csv_plus_plus/writer/google_sheets.rb +4 -10
- data/lib/csv_plus_plus/writer/rubyxl_builder.rb +23 -15
- data/lib/csv_plus_plus/writer/rubyxl_modifier.rb +15 -8
- data/lib/csv_plus_plus.rb +42 -8
- metadata +5 -2
@@ -7,12 +7,14 @@
|
|
7
7
|
require 'racc/parser.rb'
|
8
8
|
|
9
9
|
require_relative '../lexer'
|
10
|
+
require_relative '../language/ast_builder'
|
10
11
|
|
11
12
|
module CSVPlusPlus
|
12
13
|
module Language
|
13
14
|
class CellValueParser < Racc::Parser
|
14
15
|
|
15
16
|
module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 48)
|
17
|
+
include ::CSVPlusPlus::Language::ASTBuilder
|
16
18
|
include ::CSVPlusPlus::Lexer
|
17
19
|
|
18
20
|
protected
|
@@ -29,18 +31,18 @@ module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 48)
|
|
29
31
|
@ast
|
30
32
|
end
|
31
33
|
|
32
|
-
def tokenizer
|
34
|
+
def tokenizer
|
33
35
|
::CSVPlusPlus::Lexer::Tokenizer.new(
|
34
|
-
catchall: /[\(\)
|
36
|
+
catchall: /[\{\}\(\),=]/,
|
35
37
|
ignore: /\s+/,
|
36
|
-
input:,
|
37
38
|
tokens: [
|
38
|
-
[
|
39
|
-
[
|
40
|
-
[
|
41
|
-
[
|
42
|
-
[
|
43
|
-
[
|
39
|
+
TOKEN_LIBRARY[:TRUE],
|
40
|
+
TOKEN_LIBRARY[:FALSE],
|
41
|
+
TOKEN_LIBRARY[:NUMBER],
|
42
|
+
TOKEN_LIBRARY[:STRING],
|
43
|
+
TOKEN_LIBRARY[:INFIX_OP],
|
44
|
+
TOKEN_LIBRARY[:VAR_REF],
|
45
|
+
TOKEN_LIBRARY[:ID]
|
44
46
|
]
|
45
47
|
)
|
46
48
|
end
|
@@ -48,108 +50,99 @@ module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 48)
|
|
48
50
|
##### State transition tables begin ###
|
49
51
|
|
50
52
|
racc_action_table = [
|
51
|
-
|
52
|
-
|
53
|
-
8, 12, 13, 10, 9, 11, 8,
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
20, 23, 16, 7, 31, 12, 13, 10, 9, 11,
|
59
|
-
8, 12, 13, 10, 9, 11, 8, 7, 29, 16,
|
60
|
-
17, 20, 18, 19, 16, 12, 13, 10, 9, 11,
|
61
|
-
8 ]
|
53
|
+
7, 21, 15, 25, 2, 16, 3, 7, 14, 18,
|
54
|
+
19, 16, 16, 16, 7, 12, 13, 16, 10, 9,
|
55
|
+
11, 8, 12, 13, 26, 10, 9, 11, 8, 12,
|
56
|
+
13, nil, 10, 9, 11, 8, 7, 23, nil, nil,
|
57
|
+
nil, nil, nil, 7, nil, nil, nil, nil, nil, nil,
|
58
|
+
nil, 12, 13, nil, 10, 9, 11, 8, 12, 13,
|
59
|
+
nil, 10, 9, 11, 8 ]
|
62
60
|
|
63
61
|
racc_action_check = [
|
64
|
-
|
65
|
-
|
66
|
-
2, 7, 7, 7, 7, 7, 7, 16,
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
27, 13, 25, 23, 23, 20, 20, 20, 20, 20,
|
72
|
-
20, 23, 23, 23, 23, 23, 23, 34, 21, 21,
|
73
|
-
21, 21, 21, 21, 28, 34, 34, 34, 34, 34,
|
74
|
-
34 ]
|
62
|
+
2, 17, 4, 22, 0, 4, 1, 7, 3, 8,
|
63
|
+
13, 20, 24, 27, 16, 2, 2, 17, 2, 2,
|
64
|
+
2, 2, 7, 7, 22, 7, 7, 7, 7, 16,
|
65
|
+
16, nil, 16, 16, 16, 16, 19, 19, nil, nil,
|
66
|
+
nil, nil, nil, 26, nil, nil, nil, nil, nil, nil,
|
67
|
+
nil, 19, 19, nil, 19, 19, 19, 19, 26, 26,
|
68
|
+
nil, 26, 26, 26, 26 ]
|
75
69
|
|
76
70
|
racc_action_pointer = [
|
77
|
-
|
78
|
-
nil, nil, nil,
|
79
|
-
|
80
|
-
-3, nil, 4, nil, 85, 24 ]
|
71
|
+
-6, 6, -2, 8, -14, nil, nil, 5, -9, nil,
|
72
|
+
nil, nil, nil, 8, nil, nil, 12, -2, nil, 34,
|
73
|
+
-8, nil, 0, nil, -7, nil, 41, -6 ]
|
81
74
|
|
82
75
|
racc_action_default = [
|
83
|
-
-
|
84
|
-
-7, -8, -9, -10,
|
85
|
-
-
|
86
|
-
-20, -12, -14, -11, -20, -13 ]
|
76
|
+
-16, -16, -16, -16, -16, -2, -3, -16, -16, -6,
|
77
|
+
-7, -8, -9, -10, 28, -1, -16, -16, -5, -16,
|
78
|
+
-15, -4, -16, -12, -14, -11, -16, -13 ]
|
87
79
|
|
88
80
|
racc_goto_table = [
|
89
|
-
4, 1,
|
90
|
-
nil, nil, nil, nil,
|
91
|
-
nil,
|
92
|
-
nil, nil, 35 ]
|
81
|
+
4, 1, 22, nil, nil, 17, nil, nil, nil, nil,
|
82
|
+
nil, nil, nil, nil, 20, nil, nil, 24, nil, nil,
|
83
|
+
nil, nil, nil, nil, 27 ]
|
93
84
|
|
94
85
|
racc_goto_check = [
|
95
86
|
2, 1, 5, nil, nil, 2, nil, nil, nil, nil,
|
96
|
-
nil, nil, nil, nil, 2,
|
97
|
-
nil,
|
98
|
-
nil, nil, 2 ]
|
87
|
+
nil, nil, nil, nil, 2, nil, nil, 2, nil, nil,
|
88
|
+
nil, nil, nil, nil, 2 ]
|
99
89
|
|
100
90
|
racc_goto_pointer = [
|
101
|
-
nil, 1, -2, nil, nil, -
|
91
|
+
nil, 1, -2, nil, nil, -17 ]
|
102
92
|
|
103
93
|
racc_goto_default = [
|
104
94
|
nil, nil, nil, 5, 6, nil ]
|
105
95
|
|
106
96
|
racc_reduce_table = [
|
107
97
|
0, 0, :racc_error,
|
108
|
-
3,
|
109
|
-
1,
|
110
|
-
1,
|
111
|
-
3,
|
112
|
-
2,
|
113
|
-
1,
|
114
|
-
1,
|
115
|
-
1,
|
116
|
-
1,
|
117
|
-
1,
|
118
|
-
4,
|
119
|
-
3,
|
120
|
-
3,
|
121
|
-
1,
|
122
|
-
3,
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
racc_reduce_n = 20
|
129
|
-
|
130
|
-
racc_shift_n = 36
|
98
|
+
3, 26, :_reduce_1,
|
99
|
+
1, 27, :_reduce_none,
|
100
|
+
1, 27, :_reduce_none,
|
101
|
+
3, 27, :_reduce_4,
|
102
|
+
2, 27, :_reduce_5,
|
103
|
+
1, 27, :_reduce_6,
|
104
|
+
1, 27, :_reduce_7,
|
105
|
+
1, 27, :_reduce_8,
|
106
|
+
1, 27, :_reduce_9,
|
107
|
+
1, 27, :_reduce_10,
|
108
|
+
4, 28, :_reduce_11,
|
109
|
+
3, 28, :_reduce_12,
|
110
|
+
3, 30, :_reduce_13,
|
111
|
+
1, 30, :_reduce_14,
|
112
|
+
3, 29, :_reduce_15 ]
|
113
|
+
|
114
|
+
racc_reduce_n = 16
|
115
|
+
|
116
|
+
racc_shift_n = 28
|
131
117
|
|
132
118
|
racc_token_table = {
|
133
119
|
false => 0,
|
134
120
|
:error => 1,
|
135
121
|
"(" => 2,
|
136
122
|
")" => 3,
|
137
|
-
"
|
123
|
+
"^" => 4,
|
138
124
|
"*" => 5,
|
139
125
|
"/" => 6,
|
140
126
|
"+" => 7,
|
141
127
|
"-" => 8,
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
128
|
+
"&" => 9,
|
129
|
+
"=" => 10,
|
130
|
+
"<" => 11,
|
131
|
+
">" => 12,
|
132
|
+
"<=" => 13,
|
133
|
+
">=" => 14,
|
134
|
+
"<>" => 15,
|
135
|
+
:EOL => 16,
|
136
|
+
:FALSE => 17,
|
137
|
+
:ID => 18,
|
138
|
+
:INFIX_OP => 19,
|
139
|
+
:NUMBER => 20,
|
140
|
+
:STRING => 21,
|
141
|
+
:TRUE => 22,
|
142
|
+
:VAR_REF => 23,
|
143
|
+
"," => 24 }
|
144
|
+
|
145
|
+
racc_nt_base = 25
|
153
146
|
|
154
147
|
racc_use_result_var = true
|
155
148
|
|
@@ -174,19 +167,26 @@ Racc_token_to_s_table = [
|
|
174
167
|
"error",
|
175
168
|
"\"(\"",
|
176
169
|
"\")\"",
|
177
|
-
"\"
|
170
|
+
"\"^\"",
|
178
171
|
"\"*\"",
|
179
172
|
"\"/\"",
|
180
173
|
"\"+\"",
|
181
174
|
"\"-\"",
|
175
|
+
"\"&\"",
|
176
|
+
"\"=\"",
|
177
|
+
"\"<\"",
|
178
|
+
"\">\"",
|
179
|
+
"\"<=\"",
|
180
|
+
"\">=\"",
|
181
|
+
"\"<>\"",
|
182
182
|
"EOL",
|
183
183
|
"FALSE",
|
184
184
|
"ID",
|
185
|
+
"INFIX_OP",
|
185
186
|
"NUMBER",
|
186
187
|
"STRING",
|
187
188
|
"TRUE",
|
188
189
|
"VAR_REF",
|
189
|
-
"\"=\"",
|
190
190
|
"\",\"",
|
191
191
|
"$start",
|
192
192
|
"cell_value",
|
@@ -201,7 +201,7 @@ Racc_debug_parser = false
|
|
201
201
|
|
202
202
|
# reduce 0 omitted
|
203
203
|
|
204
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
204
|
+
module_eval(<<'.,.,', 'cell_value.y', 20)
|
205
205
|
def _reduce_1(val, _values, result)
|
206
206
|
@ast = val[1]
|
207
207
|
result
|
@@ -212,114 +212,86 @@ module_eval(<<'.,.,', 'cell_value.y', 17)
|
|
212
212
|
|
213
213
|
# reduce 3 omitted
|
214
214
|
|
215
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
215
|
+
module_eval(<<'.,.,', 'cell_value.y', 24)
|
216
216
|
def _reduce_4(val, _values, result)
|
217
217
|
result = val[1]
|
218
218
|
result
|
219
219
|
end
|
220
220
|
.,.,
|
221
221
|
|
222
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
222
|
+
module_eval(<<'.,.,', 'cell_value.y', 25)
|
223
223
|
def _reduce_5(val, _values, result)
|
224
|
-
result =
|
224
|
+
result = variable(val[1])
|
225
225
|
result
|
226
226
|
end
|
227
227
|
.,.,
|
228
228
|
|
229
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
229
|
+
module_eval(<<'.,.,', 'cell_value.y', 26)
|
230
230
|
def _reduce_6(val, _values, result)
|
231
|
-
result =
|
231
|
+
result = string(val[0])
|
232
232
|
result
|
233
233
|
end
|
234
234
|
.,.,
|
235
235
|
|
236
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
236
|
+
module_eval(<<'.,.,', 'cell_value.y', 27)
|
237
237
|
def _reduce_7(val, _values, result)
|
238
|
-
result =
|
238
|
+
result = number(val[0])
|
239
239
|
result
|
240
240
|
end
|
241
241
|
.,.,
|
242
242
|
|
243
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
243
|
+
module_eval(<<'.,.,', 'cell_value.y', 28)
|
244
244
|
def _reduce_8(val, _values, result)
|
245
|
-
result =
|
245
|
+
result = boolean(true)
|
246
246
|
result
|
247
247
|
end
|
248
248
|
.,.,
|
249
249
|
|
250
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
250
|
+
module_eval(<<'.,.,', 'cell_value.y', 29)
|
251
251
|
def _reduce_9(val, _values, result)
|
252
|
-
result =
|
252
|
+
result = boolean(false)
|
253
253
|
result
|
254
254
|
end
|
255
255
|
.,.,
|
256
256
|
|
257
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
257
|
+
module_eval(<<'.,.,', 'cell_value.y', 30)
|
258
258
|
def _reduce_10(val, _values, result)
|
259
|
-
result =
|
259
|
+
result = cell_reference(val[0])
|
260
260
|
result
|
261
261
|
end
|
262
262
|
.,.,
|
263
263
|
|
264
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
264
|
+
module_eval(<<'.,.,', 'cell_value.y', 32)
|
265
265
|
def _reduce_11(val, _values, result)
|
266
|
-
result =
|
266
|
+
result = function_call(val[0], val[2])
|
267
267
|
result
|
268
268
|
end
|
269
269
|
.,.,
|
270
270
|
|
271
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
271
|
+
module_eval(<<'.,.,', 'cell_value.y', 33)
|
272
272
|
def _reduce_12(val, _values, result)
|
273
|
-
result =
|
273
|
+
result = function_call(val[0], [])
|
274
274
|
result
|
275
275
|
end
|
276
276
|
.,.,
|
277
277
|
|
278
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
278
|
+
module_eval(<<'.,.,', 'cell_value.y', 35)
|
279
279
|
def _reduce_13(val, _values, result)
|
280
280
|
result = val[0] << val[2]
|
281
281
|
result
|
282
282
|
end
|
283
283
|
.,.,
|
284
284
|
|
285
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
285
|
+
module_eval(<<'.,.,', 'cell_value.y', 36)
|
286
286
|
def _reduce_14(val, _values, result)
|
287
287
|
result = [val[0]]
|
288
288
|
result
|
289
289
|
end
|
290
290
|
.,.,
|
291
291
|
|
292
|
-
module_eval(<<'.,.,', 'cell_value.y', 35)
|
293
|
-
def _reduce_15(val, _values, result)
|
294
|
-
result = e(:function_call, :concat, [val[0], val[2]])
|
295
|
-
result
|
296
|
-
end
|
297
|
-
.,.,
|
298
|
-
|
299
|
-
module_eval(<<'.,.,', 'cell_value.y', 36)
|
300
|
-
def _reduce_16(val, _values, result)
|
301
|
-
result = e(:function_call, :multiply, [val[0], val[2]])
|
302
|
-
result
|
303
|
-
end
|
304
|
-
.,.,
|
305
|
-
|
306
|
-
module_eval(<<'.,.,', 'cell_value.y', 37)
|
307
|
-
def _reduce_17(val, _values, result)
|
308
|
-
result = e(:function_call, :add, [val[0], val[2]])
|
309
|
-
result
|
310
|
-
end
|
311
|
-
.,.,
|
312
|
-
|
313
292
|
module_eval(<<'.,.,', 'cell_value.y', 38)
|
314
|
-
def
|
315
|
-
result =
|
316
|
-
result
|
317
|
-
end
|
318
|
-
.,.,
|
319
|
-
|
320
|
-
module_eval(<<'.,.,', 'cell_value.y', 39)
|
321
|
-
def _reduce_19(val, _values, result)
|
322
|
-
result = e(:function_call, :divide, [val[0], val[2]])
|
293
|
+
def _reduce_15(val, _values, result)
|
294
|
+
result = function_call(val[1], [val[0], val[2]], infix: true)
|
323
295
|
result
|
324
296
|
end
|
325
297
|
.,.,
|