csv_plus_plus 0.0.5 → 0.1.1
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.
- 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
|
.,.,
|