csv_plus_plus 0.1.2 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +9 -5
- data/{CHANGELOG.md → docs/CHANGELOG.md} +25 -0
- data/lib/csv_plus_plus/a1_reference.rb +202 -0
- data/lib/csv_plus_plus/benchmarked_compiler.rb +70 -20
- data/lib/csv_plus_plus/cell.rb +29 -41
- data/lib/csv_plus_plus/cli.rb +53 -80
- data/lib/csv_plus_plus/cli_flag.rb +71 -71
- data/lib/csv_plus_plus/color.rb +32 -7
- data/lib/csv_plus_plus/compiler.rb +98 -66
- data/lib/csv_plus_plus/entities/ast_builder.rb +30 -39
- data/lib/csv_plus_plus/entities/boolean.rb +26 -10
- data/lib/csv_plus_plus/entities/builtins.rb +66 -24
- data/lib/csv_plus_plus/entities/date.rb +42 -6
- data/lib/csv_plus_plus/entities/entity.rb +17 -69
- data/lib/csv_plus_plus/entities/entity_with_arguments.rb +44 -0
- data/lib/csv_plus_plus/entities/function.rb +34 -11
- data/lib/csv_plus_plus/entities/function_call.rb +49 -10
- data/lib/csv_plus_plus/entities/has_identifier.rb +19 -0
- data/lib/csv_plus_plus/entities/number.rb +30 -11
- data/lib/csv_plus_plus/entities/reference.rb +77 -0
- data/lib/csv_plus_plus/entities/runtime_value.rb +43 -13
- data/lib/csv_plus_plus/entities/string.rb +23 -7
- data/lib/csv_plus_plus/entities.rb +7 -16
- data/lib/csv_plus_plus/error/cli_error.rb +17 -0
- data/lib/csv_plus_plus/error/compiler_error.rb +17 -0
- data/lib/csv_plus_plus/error/error.rb +25 -2
- data/lib/csv_plus_plus/error/formula_syntax_error.rb +12 -12
- data/lib/csv_plus_plus/error/modifier_syntax_error.rb +34 -12
- data/lib/csv_plus_plus/error/modifier_validation_error.rb +21 -27
- data/lib/csv_plus_plus/error/positional_error.rb +15 -0
- data/lib/csv_plus_plus/error/writer_error.rb +8 -0
- data/lib/csv_plus_plus/error.rb +5 -1
- data/lib/csv_plus_plus/error_formatter.rb +111 -0
- data/lib/csv_plus_plus/google_api_client.rb +25 -10
- data/lib/csv_plus_plus/lexer/racc_lexer.rb +144 -0
- data/lib/csv_plus_plus/lexer/tokenizer.rb +58 -17
- data/lib/csv_plus_plus/lexer.rb +64 -1
- data/lib/csv_plus_plus/modifier/conditional_formatting.rb +1 -0
- data/lib/csv_plus_plus/modifier/data_validation.rb +138 -0
- data/lib/csv_plus_plus/modifier/expand.rb +78 -0
- data/lib/csv_plus_plus/modifier/google_sheet_modifier.rb +133 -0
- data/lib/csv_plus_plus/modifier/modifier.rb +222 -0
- data/lib/csv_plus_plus/modifier/modifier_validator.rb +243 -0
- data/lib/csv_plus_plus/modifier/rubyxl_modifier.rb +84 -0
- data/lib/csv_plus_plus/modifier.rb +89 -160
- data/lib/csv_plus_plus/options/file_options.rb +49 -0
- data/lib/csv_plus_plus/options/google_sheets_options.rb +42 -0
- data/lib/csv_plus_plus/options/options.rb +97 -0
- data/lib/csv_plus_plus/options.rb +34 -77
- data/lib/csv_plus_plus/parser/cell_value.tab.rb +66 -67
- data/lib/csv_plus_plus/parser/code_section.tab.rb +86 -83
- data/lib/csv_plus_plus/parser/modifier.tab.rb +57 -53
- data/lib/csv_plus_plus/reader/csv.rb +50 -0
- data/lib/csv_plus_plus/reader/google_sheets.rb +129 -0
- data/lib/csv_plus_plus/reader/reader.rb +27 -0
- data/lib/csv_plus_plus/reader/rubyxl.rb +37 -0
- data/lib/csv_plus_plus/reader.rb +14 -0
- data/lib/csv_plus_plus/row.rb +53 -12
- data/lib/csv_plus_plus/runtime/graph.rb +68 -0
- data/lib/csv_plus_plus/runtime/position.rb +242 -0
- data/lib/csv_plus_plus/runtime/references.rb +115 -0
- data/lib/csv_plus_plus/runtime/runtime.rb +132 -0
- data/lib/csv_plus_plus/runtime/scope.rb +280 -0
- data/lib/csv_plus_plus/runtime.rb +34 -191
- data/lib/csv_plus_plus/source_code.rb +71 -0
- data/lib/csv_plus_plus/template.rb +71 -39
- data/lib/csv_plus_plus/version.rb +2 -1
- data/lib/csv_plus_plus/writer/csv.rb +37 -8
- data/lib/csv_plus_plus/writer/excel.rb +25 -5
- data/lib/csv_plus_plus/writer/file_backer_upper.rb +27 -13
- data/lib/csv_plus_plus/writer/google_sheets.rb +29 -85
- data/lib/csv_plus_plus/writer/google_sheets_builder.rb +179 -0
- data/lib/csv_plus_plus/writer/merger.rb +31 -0
- data/lib/csv_plus_plus/writer/open_document.rb +21 -2
- data/lib/csv_plus_plus/writer/rubyxl_builder.rb +140 -42
- data/lib/csv_plus_plus/writer/writer.rb +42 -0
- data/lib/csv_plus_plus/writer.rb +79 -10
- data/lib/csv_plus_plus.rb +47 -18
- metadata +50 -21
- data/lib/csv_plus_plus/can_define_references.rb +0 -88
- data/lib/csv_plus_plus/can_resolve_references.rb +0 -8
- data/lib/csv_plus_plus/data_validation.rb +0 -138
- data/lib/csv_plus_plus/entities/cell_reference.rb +0 -60
- data/lib/csv_plus_plus/entities/variable.rb +0 -25
- data/lib/csv_plus_plus/error/syntax_error.rb +0 -58
- data/lib/csv_plus_plus/expand.rb +0 -20
- data/lib/csv_plus_plus/google_options.rb +0 -27
- data/lib/csv_plus_plus/graph.rb +0 -62
- data/lib/csv_plus_plus/lexer/lexer.rb +0 -85
- data/lib/csv_plus_plus/references.rb +0 -68
- data/lib/csv_plus_plus/scope.rb +0 -196
- data/lib/csv_plus_plus/validated_modifier.rb +0 -164
- data/lib/csv_plus_plus/writer/base_writer.rb +0 -20
- data/lib/csv_plus_plus/writer/google_sheet_builder.rb +0 -147
- data/lib/csv_plus_plus/writer/google_sheet_modifier.rb +0 -77
- data/lib/csv_plus_plus/writer/rubyxl_modifier.rb +0 -59
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
require 'racc/parser.rb'
|
|
8
8
|
|
|
9
9
|
require_relative '../lexer'
|
|
10
|
+
require_relative '../lexer/racc_lexer'
|
|
10
11
|
require_relative '../entities/ast_builder'
|
|
11
12
|
|
|
12
13
|
module CSVPlusPlus
|
|
@@ -14,35 +15,43 @@ module CSVPlusPlus
|
|
|
14
15
|
class CellValue < Racc::Parser
|
|
15
16
|
|
|
16
17
|
module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 49)
|
|
18
|
+
extend ::T::Sig
|
|
19
|
+
extend ::T::Generic
|
|
17
20
|
include ::CSVPlusPlus::Entities::ASTBuilder
|
|
18
|
-
include ::CSVPlusPlus::Lexer
|
|
21
|
+
include ::CSVPlusPlus::Lexer::RaccLexer
|
|
22
|
+
|
|
23
|
+
ReturnType = type_member {{ fixed: ::T.nilable(::CSVPlusPlus::Entities::Entity) }}
|
|
19
24
|
|
|
20
25
|
protected
|
|
21
26
|
|
|
27
|
+
sig { override.params(input: ::String).returns(::T::Boolean) }
|
|
22
28
|
def anything_to_parse?(input)
|
|
23
29
|
input.strip.start_with?('=')
|
|
24
30
|
end
|
|
25
31
|
|
|
32
|
+
sig { override.returns(::String) }
|
|
26
33
|
def parse_subject
|
|
27
34
|
'cell value'
|
|
28
35
|
end
|
|
29
36
|
|
|
37
|
+
sig { override.returns(ReturnType) }
|
|
30
38
|
def return_value
|
|
31
39
|
@ast
|
|
32
40
|
end
|
|
33
41
|
|
|
42
|
+
sig { override.returns(::CSVPlusPlus::Lexer::Tokenizer) }
|
|
34
43
|
def tokenizer
|
|
35
44
|
::CSVPlusPlus::Lexer::Tokenizer.new(
|
|
36
45
|
catchall: /[\{\}\(\),=]/,
|
|
37
46
|
ignore: /\s+/,
|
|
38
47
|
tokens: [
|
|
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[:
|
|
48
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:TRUE],
|
|
49
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:FALSE],
|
|
50
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:NUMBER],
|
|
51
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:STRING],
|
|
52
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:INFIX_OP],
|
|
53
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:VAR_REF],
|
|
54
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:REF]
|
|
46
55
|
]
|
|
47
56
|
)
|
|
48
57
|
end
|
|
@@ -50,45 +59,43 @@ module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 49)
|
|
|
50
59
|
##### State transition tables begin ###
|
|
51
60
|
|
|
52
61
|
racc_action_table = [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
11,
|
|
56
|
-
|
|
57
|
-
nil, nil, nil,
|
|
58
|
-
nil,
|
|
59
|
-
nil, 10, 9, 11, 8 ]
|
|
62
|
+
23, 19, 14, 2, 15, 7, 3, 13, 17, 15,
|
|
63
|
+
15, 7, 15, nil, nil, nil, 15, 7, nil, nil,
|
|
64
|
+
11, 24, 9, 12, 8, 10, 11, 7, 9, 12,
|
|
65
|
+
8, 10, 11, nil, 9, 12, 8, 10, 7, 21,
|
|
66
|
+
nil, nil, 11, nil, 9, 12, 8, 10, nil, nil,
|
|
67
|
+
nil, nil, nil, 11, nil, 9, 12, 8, 10 ]
|
|
60
68
|
|
|
61
69
|
racc_action_check = [
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
2, 2,
|
|
65
|
-
|
|
66
|
-
nil, nil, nil,
|
|
67
|
-
nil,
|
|
68
|
-
nil, 26, 26, 26, 26 ]
|
|
70
|
+
20, 16, 4, 0, 4, 2, 1, 3, 12, 18,
|
|
71
|
+
22, 7, 25, nil, nil, nil, 16, 15, nil, nil,
|
|
72
|
+
2, 20, 2, 2, 2, 2, 7, 24, 7, 7,
|
|
73
|
+
7, 7, 15, nil, 15, 15, 15, 15, 17, 17,
|
|
74
|
+
nil, nil, 24, nil, 24, 24, 24, 24, nil, nil,
|
|
75
|
+
nil, nil, nil, 17, nil, 17, 17, 17, 17 ]
|
|
69
76
|
|
|
70
77
|
racc_action_pointer = [
|
|
71
|
-
-
|
|
72
|
-
nil, nil,
|
|
73
|
-
-
|
|
78
|
+
-7, 6, 3, 7, -14, nil, nil, 9, nil, nil,
|
|
79
|
+
nil, nil, 6, nil, nil, 15, -2, 36, -9, nil,
|
|
80
|
+
-3, nil, -8, nil, 25, -6 ]
|
|
74
81
|
|
|
75
82
|
racc_action_default = [
|
|
76
|
-
-
|
|
77
|
-
-7, -8, -9,
|
|
78
|
-
-15,
|
|
83
|
+
-15, -15, -15, -15, -15, -2, -3, -15, -5, -6,
|
|
84
|
+
-7, -8, -9, 26, -1, -15, -15, -15, -14, -4,
|
|
85
|
+
-15, -11, -13, -10, -15, -12 ]
|
|
79
86
|
|
|
80
87
|
racc_goto_table = [
|
|
81
|
-
4, 1,
|
|
82
|
-
nil, nil, nil, nil,
|
|
83
|
-
nil, nil,
|
|
88
|
+
4, 1, 20, nil, nil, 16, nil, nil, nil, nil,
|
|
89
|
+
nil, nil, nil, 18, nil, 22, nil, nil, nil, nil,
|
|
90
|
+
nil, nil, 25 ]
|
|
84
91
|
|
|
85
92
|
racc_goto_check = [
|
|
86
93
|
2, 1, 5, nil, nil, 2, nil, nil, nil, nil,
|
|
87
|
-
nil, nil, nil, nil, 2, nil, nil,
|
|
88
|
-
nil, nil,
|
|
94
|
+
nil, nil, nil, 2, nil, 2, nil, nil, nil, nil,
|
|
95
|
+
nil, nil, 2 ]
|
|
89
96
|
|
|
90
97
|
racc_goto_pointer = [
|
|
91
|
-
nil, 1, -2, nil, nil, -
|
|
98
|
+
nil, 1, -2, nil, nil, -15 ]
|
|
92
99
|
|
|
93
100
|
racc_goto_default = [
|
|
94
101
|
nil, nil, nil, 5, 6, nil ]
|
|
@@ -99,21 +106,20 @@ racc_reduce_table = [
|
|
|
99
106
|
1, 27, :_reduce_none,
|
|
100
107
|
1, 27, :_reduce_none,
|
|
101
108
|
3, 27, :_reduce_4,
|
|
102
|
-
|
|
109
|
+
1, 27, :_reduce_5,
|
|
103
110
|
1, 27, :_reduce_6,
|
|
104
111
|
1, 27, :_reduce_7,
|
|
105
112
|
1, 27, :_reduce_8,
|
|
106
113
|
1, 27, :_reduce_9,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
3,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
3, 29, :_reduce_15 ]
|
|
114
|
+
4, 28, :_reduce_10,
|
|
115
|
+
3, 28, :_reduce_11,
|
|
116
|
+
3, 30, :_reduce_12,
|
|
117
|
+
1, 30, :_reduce_13,
|
|
118
|
+
3, 29, :_reduce_14 ]
|
|
113
119
|
|
|
114
|
-
racc_reduce_n =
|
|
120
|
+
racc_reduce_n = 15
|
|
115
121
|
|
|
116
|
-
racc_shift_n =
|
|
122
|
+
racc_shift_n = 26
|
|
117
123
|
|
|
118
124
|
racc_token_table = {
|
|
119
125
|
false => 0,
|
|
@@ -134,9 +140,9 @@ racc_token_table = {
|
|
|
134
140
|
"<>" => 15,
|
|
135
141
|
:EOL => 16,
|
|
136
142
|
:FALSE => 17,
|
|
137
|
-
:
|
|
138
|
-
:
|
|
139
|
-
:
|
|
143
|
+
:INFIX_OP => 18,
|
|
144
|
+
:NUMBER => 19,
|
|
145
|
+
:REF => 20,
|
|
140
146
|
:STRING => 21,
|
|
141
147
|
:TRUE => 22,
|
|
142
148
|
:VAR_REF => 23,
|
|
@@ -181,9 +187,9 @@ Racc_token_to_s_table = [
|
|
|
181
187
|
"\"<>\"",
|
|
182
188
|
"EOL",
|
|
183
189
|
"FALSE",
|
|
184
|
-
"ID",
|
|
185
190
|
"INFIX_OP",
|
|
186
191
|
"NUMBER",
|
|
192
|
+
"REF",
|
|
187
193
|
"STRING",
|
|
188
194
|
"TRUE",
|
|
189
195
|
"VAR_REF",
|
|
@@ -221,77 +227,70 @@ module_eval(<<'.,.,', 'cell_value.y', 25)
|
|
|
221
227
|
|
|
222
228
|
module_eval(<<'.,.,', 'cell_value.y', 26)
|
|
223
229
|
def _reduce_5(val, _values, result)
|
|
224
|
-
result =
|
|
230
|
+
result = string(val[0])
|
|
225
231
|
result
|
|
226
232
|
end
|
|
227
233
|
.,.,
|
|
228
234
|
|
|
229
235
|
module_eval(<<'.,.,', 'cell_value.y', 27)
|
|
230
236
|
def _reduce_6(val, _values, result)
|
|
231
|
-
result =
|
|
237
|
+
result = number(val[0])
|
|
232
238
|
result
|
|
233
239
|
end
|
|
234
240
|
.,.,
|
|
235
241
|
|
|
236
242
|
module_eval(<<'.,.,', 'cell_value.y', 28)
|
|
237
243
|
def _reduce_7(val, _values, result)
|
|
238
|
-
result =
|
|
244
|
+
result = boolean(true)
|
|
239
245
|
result
|
|
240
246
|
end
|
|
241
247
|
.,.,
|
|
242
248
|
|
|
243
249
|
module_eval(<<'.,.,', 'cell_value.y', 29)
|
|
244
250
|
def _reduce_8(val, _values, result)
|
|
245
|
-
result = boolean(
|
|
251
|
+
result = boolean(false)
|
|
246
252
|
result
|
|
247
253
|
end
|
|
248
254
|
.,.,
|
|
249
255
|
|
|
250
256
|
module_eval(<<'.,.,', 'cell_value.y', 30)
|
|
251
257
|
def _reduce_9(val, _values, result)
|
|
252
|
-
result =
|
|
258
|
+
result = reference(ref: val[0])
|
|
253
259
|
result
|
|
254
260
|
end
|
|
255
261
|
.,.,
|
|
256
262
|
|
|
257
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
|
263
|
+
module_eval(<<'.,.,', 'cell_value.y', 32)
|
|
258
264
|
def _reduce_10(val, _values, result)
|
|
259
|
-
result =
|
|
265
|
+
result = function_call(val[0].to_sym, val[2])
|
|
260
266
|
result
|
|
261
267
|
end
|
|
262
268
|
.,.,
|
|
263
269
|
|
|
264
270
|
module_eval(<<'.,.,', 'cell_value.y', 33)
|
|
265
271
|
def _reduce_11(val, _values, result)
|
|
266
|
-
result = function_call(val[0],
|
|
272
|
+
result = function_call(val[0].to_sym, [])
|
|
267
273
|
result
|
|
268
274
|
end
|
|
269
275
|
.,.,
|
|
270
276
|
|
|
271
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
|
277
|
+
module_eval(<<'.,.,', 'cell_value.y', 35)
|
|
272
278
|
def _reduce_12(val, _values, result)
|
|
273
|
-
result =
|
|
279
|
+
result = val[0] << val[2]
|
|
274
280
|
result
|
|
275
281
|
end
|
|
276
282
|
.,.,
|
|
277
283
|
|
|
278
284
|
module_eval(<<'.,.,', 'cell_value.y', 36)
|
|
279
285
|
def _reduce_13(val, _values, result)
|
|
280
|
-
result = val[0] << val[2]
|
|
281
|
-
result
|
|
282
|
-
end
|
|
283
|
-
.,.,
|
|
284
|
-
|
|
285
|
-
module_eval(<<'.,.,', 'cell_value.y', 37)
|
|
286
|
-
def _reduce_14(val, _values, result)
|
|
287
286
|
result = [val[0]]
|
|
288
287
|
result
|
|
289
288
|
end
|
|
290
289
|
.,.,
|
|
291
290
|
|
|
292
|
-
module_eval(<<'.,.,', 'cell_value.y',
|
|
293
|
-
def
|
|
294
|
-
result = function_call(val[1], [val[0], val[2]], infix: true)
|
|
291
|
+
module_eval(<<'.,.,', 'cell_value.y', 38)
|
|
292
|
+
def _reduce_14(val, _values, result)
|
|
293
|
+
result = function_call(val[1].to_sym, [val[0], val[2]], infix: true)
|
|
295
294
|
result
|
|
296
295
|
end
|
|
297
296
|
.,.,
|
|
@@ -6,17 +6,22 @@
|
|
|
6
6
|
|
|
7
7
|
require 'racc/parser.rb'
|
|
8
8
|
|
|
9
|
-
require_relative '../lexer'
|
|
9
|
+
require_relative '../lexer/racc_lexer'
|
|
10
10
|
require_relative '../entities/ast_builder'
|
|
11
11
|
|
|
12
12
|
module CSVPlusPlus
|
|
13
13
|
module Parser
|
|
14
14
|
class CodeSection < Racc::Parser
|
|
15
15
|
|
|
16
|
-
module_eval(<<'...end code_section.y/module_eval...', 'code_section.y',
|
|
17
|
-
|
|
16
|
+
module_eval(<<'...end code_section.y/module_eval...', 'code_section.y', 68)
|
|
17
|
+
extend ::T::Sig
|
|
18
|
+
extend ::T::Generic
|
|
19
|
+
include ::CSVPlusPlus::Lexer::RaccLexer
|
|
18
20
|
include ::CSVPlusPlus::Entities::ASTBuilder
|
|
19
21
|
|
|
22
|
+
ReturnType = type_member {{ fixed: ::T.nilable(::String) }}
|
|
23
|
+
|
|
24
|
+
sig { params(scope: ::CSVPlusPlus::Runtime::Scope).void }
|
|
20
25
|
def initialize(scope)
|
|
21
26
|
super()
|
|
22
27
|
@scope = scope
|
|
@@ -24,20 +29,23 @@ module_eval(<<'...end code_section.y/module_eval...', 'code_section.y', 69)
|
|
|
24
29
|
|
|
25
30
|
protected
|
|
26
31
|
|
|
32
|
+
sig { override.params(input: ::String).returns(::T::Boolean) }
|
|
27
33
|
def anything_to_parse?(input)
|
|
28
34
|
@rest = input.strip
|
|
29
35
|
|
|
30
36
|
return !@rest.index(::CSVPlusPlus::Lexer::END_OF_CODE_SECTION).nil?
|
|
31
37
|
end
|
|
32
38
|
|
|
39
|
+
sig { override.returns(::String) }
|
|
33
40
|
def parse_subject
|
|
34
41
|
'code section'
|
|
35
42
|
end
|
|
36
43
|
|
|
44
|
+
sig { override.returns(::CSVPlusPlus::Lexer::Tokenizer) }
|
|
37
45
|
def tokenizer
|
|
38
46
|
::CSVPlusPlus::Lexer::Tokenizer.new(
|
|
39
47
|
catchall: /[\{\}\(\),]/, # TODO: do I even need this (oh I think brackets are for arrays
|
|
40
|
-
ignore: /\s
|
|
48
|
+
ignore: /\s+|\#.*/,
|
|
41
49
|
stop_fn: lambda do |scanner|
|
|
42
50
|
return false unless scanner.scan(/#{::CSVPlusPlus::Lexer::END_OF_CODE_SECTION}/)
|
|
43
51
|
|
|
@@ -46,30 +54,37 @@ module_eval(<<'...end code_section.y/module_eval...', 'code_section.y', 69)
|
|
|
46
54
|
true
|
|
47
55
|
end,
|
|
48
56
|
tokens: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
TOKEN_LIBRARY[:TRUE],
|
|
52
|
-
TOKEN_LIBRARY[:FALSE],
|
|
53
|
-
TOKEN_LIBRARY[:NUMBER],
|
|
54
|
-
TOKEN_LIBRARY[:STRING],
|
|
55
|
-
TOKEN_LIBRARY[:INFIX_OP],
|
|
56
|
-
TOKEN_LIBRARY[:
|
|
57
|
-
TOKEN_LIBRARY[:ID]
|
|
57
|
+
::CSVPlusPlus::Lexer::Token.new(regexp: /:=/, token: :ASSIGN),
|
|
58
|
+
::CSVPlusPlus::Lexer::Token.new(regexp: /\bdef\b/, token: :FN_DEF),
|
|
59
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:TRUE],
|
|
60
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:FALSE],
|
|
61
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:NUMBER],
|
|
62
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:STRING],
|
|
63
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:INFIX_OP],
|
|
64
|
+
::CSVPlusPlus::Lexer::TOKEN_LIBRARY[:REF]
|
|
58
65
|
],
|
|
59
66
|
)
|
|
60
67
|
end
|
|
61
68
|
|
|
69
|
+
sig { override.returns(ReturnType) }
|
|
62
70
|
def return_value
|
|
63
71
|
@rest
|
|
64
72
|
end
|
|
65
73
|
|
|
66
74
|
private
|
|
67
75
|
|
|
76
|
+
sig do
|
|
77
|
+
params(id: ::Symbol, arguments: ::T::Array[::Symbol], body: ::CSVPlusPlus::Entities::Entity)
|
|
78
|
+
.returns(::CSVPlusPlus::Entities::Entity)
|
|
79
|
+
end
|
|
68
80
|
def def_function(id, arguments, body)
|
|
69
|
-
|
|
70
|
-
@scope.def_function(fn_def.id, fn_def)
|
|
81
|
+
@scope.def_function(id, function(id, arguments, body))
|
|
71
82
|
end
|
|
72
83
|
|
|
84
|
+
sig do
|
|
85
|
+
params(id: ::Symbol, ast: ::CSVPlusPlus::Entities::Entity)
|
|
86
|
+
.returns(::CSVPlusPlus::Entities::Entity)
|
|
87
|
+
end
|
|
73
88
|
def def_variable(id, ast)
|
|
74
89
|
@scope.def_variable(id, ast)
|
|
75
90
|
end
|
|
@@ -77,54 +92,50 @@ module_eval(<<'...end code_section.y/module_eval...', 'code_section.y', 69)
|
|
|
77
92
|
##### State transition tables begin ###
|
|
78
93
|
|
|
79
94
|
racc_action_table = [
|
|
80
|
-
20,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
8, nil, nil, nil, nil, nil, nil, nil, nil, 44 ]
|
|
95
|
+
20, 33, 9, 12, 13, 28, 20, 14, 16, 30,
|
|
96
|
+
32, 30, 20, 40, 30, 30, 34, 24, 20, 22,
|
|
97
|
+
25, 21, 23, 24, 29, 22, 25, 21, 23, 24,
|
|
98
|
+
20, 22, 25, 21, 23, 24, 36, 22, 25, 21,
|
|
99
|
+
23, 20, 39, 3, 41, 10, 7, 24, 7, 22,
|
|
100
|
+
25, 21, 23, 30, 30, nil, nil, nil, 24, 42,
|
|
101
|
+
22, 25, 21, 23, 8, nil, 8 ]
|
|
88
102
|
|
|
89
103
|
racc_action_check = [
|
|
90
|
-
13,
|
|
91
|
-
|
|
92
|
-
13, 13, 13,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
2, nil, nil, nil, nil, nil, nil, nil, nil, 40 ]
|
|
104
|
+
13, 27, 1, 7, 8, 16, 15, 9, 12, 17,
|
|
105
|
+
25, 26, 20, 34, 35, 37, 27, 13, 30, 13,
|
|
106
|
+
13, 13, 13, 15, 16, 15, 15, 15, 15, 20,
|
|
107
|
+
42, 20, 20, 20, 20, 30, 31, 30, 30, 30,
|
|
108
|
+
30, 32, 32, 0, 38, 2, 0, 42, 2, 42,
|
|
109
|
+
42, 42, 42, 31, 43, nil, nil, nil, 32, 38,
|
|
110
|
+
32, 32, 32, 32, 0, nil, 2 ]
|
|
98
111
|
|
|
99
112
|
racc_action_pointer = [
|
|
100
|
-
|
|
101
|
-
nil, nil,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
113
|
+
41, 2, 43, nil, nil, nil, nil, -20, -2, 7,
|
|
114
|
+
nil, nil, 5, -3, nil, 3, 1, -12, nil, nil,
|
|
115
|
+
9, nil, nil, nil, nil, 7, -10, -3, nil, nil,
|
|
116
|
+
15, 32, 38, nil, -10, -7, nil, -6, 40, nil,
|
|
117
|
+
nil, nil, 27, 33 ]
|
|
105
118
|
|
|
106
119
|
racc_action_default = [
|
|
107
|
-
-
|
|
108
|
-
-1, -3, -
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
120
|
+
-26, -26, -26, -2, -4, -5, -6, -26, -26, -26,
|
|
121
|
+
-1, -3, -26, -26, 44, -26, -26, -12, -13, -14,
|
|
122
|
+
-26, -16, -17, -18, -19, -20, -7, -26, -9, -11,
|
|
123
|
+
-26, -26, -26, -8, -26, -21, -15, -25, -26, -23,
|
|
124
|
+
-10, -22, -26, -24 ]
|
|
112
125
|
|
|
113
126
|
racc_goto_table = [
|
|
114
|
-
17, 4,
|
|
115
|
-
nil, nil, nil, nil, nil, nil, nil, nil, 37,
|
|
116
|
-
nil,
|
|
117
|
-
nil, 45 ]
|
|
127
|
+
17, 4, 26, 11, 1, 2, 15, 31, 27, 38,
|
|
128
|
+
nil, nil, nil, nil, nil, nil, nil, 35, nil, 37,
|
|
129
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, 43 ]
|
|
118
130
|
|
|
119
131
|
racc_goto_check = [
|
|
120
132
|
7, 3, 7, 3, 1, 2, 6, 7, 8, 11,
|
|
121
|
-
nil, nil, nil, nil, nil, nil, nil, nil, 7,
|
|
122
|
-
nil,
|
|
123
|
-
nil, 7 ]
|
|
133
|
+
nil, nil, nil, nil, nil, nil, nil, 7, nil, 7,
|
|
134
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, 7 ]
|
|
124
135
|
|
|
125
136
|
racc_goto_pointer = [
|
|
126
137
|
nil, 4, 5, 1, nil, nil, -6, -13, -8, nil,
|
|
127
|
-
nil, -
|
|
138
|
+
nil, -23 ]
|
|
128
139
|
|
|
129
140
|
racc_goto_default = [
|
|
130
141
|
nil, nil, nil, nil, 5, 6, nil, nil, nil, 18,
|
|
@@ -147,21 +158,20 @@ racc_reduce_table = [
|
|
|
147
158
|
1, 34, :_reduce_none,
|
|
148
159
|
1, 34, :_reduce_none,
|
|
149
160
|
3, 34, :_reduce_15,
|
|
150
|
-
|
|
161
|
+
1, 34, :_reduce_16,
|
|
151
162
|
1, 34, :_reduce_17,
|
|
152
163
|
1, 34, :_reduce_18,
|
|
153
164
|
1, 34, :_reduce_19,
|
|
154
165
|
1, 34, :_reduce_20,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
3,
|
|
159
|
-
|
|
160
|
-
1, 38, :_reduce_26 ]
|
|
166
|
+
3, 37, :_reduce_21,
|
|
167
|
+
4, 36, :_reduce_22,
|
|
168
|
+
3, 36, :_reduce_23,
|
|
169
|
+
3, 38, :_reduce_24,
|
|
170
|
+
1, 38, :_reduce_25 ]
|
|
161
171
|
|
|
162
|
-
racc_reduce_n =
|
|
172
|
+
racc_reduce_n = 26
|
|
163
173
|
|
|
164
|
-
racc_shift_n =
|
|
174
|
+
racc_shift_n = 44
|
|
165
175
|
|
|
166
176
|
racc_token_table = {
|
|
167
177
|
false => 0,
|
|
@@ -185,9 +195,9 @@ racc_token_table = {
|
|
|
185
195
|
"<>" => 18,
|
|
186
196
|
"," => 19,
|
|
187
197
|
:FALSE => 20,
|
|
188
|
-
:
|
|
189
|
-
:
|
|
190
|
-
:
|
|
198
|
+
:INFIX_OP => 21,
|
|
199
|
+
:NUMBER => 22,
|
|
200
|
+
:REF => 23,
|
|
191
201
|
:STRING => 24,
|
|
192
202
|
:TRUE => 25,
|
|
193
203
|
:VAR_REF => 26 }
|
|
@@ -234,9 +244,9 @@ Racc_token_to_s_table = [
|
|
|
234
244
|
"\"<>\"",
|
|
235
245
|
"\",\"",
|
|
236
246
|
"FALSE",
|
|
237
|
-
"ID",
|
|
238
247
|
"INFIX_OP",
|
|
239
248
|
"NUMBER",
|
|
249
|
+
"REF",
|
|
240
250
|
"STRING",
|
|
241
251
|
"TRUE",
|
|
242
252
|
"VAR_REF",
|
|
@@ -273,7 +283,7 @@ Racc_debug_parser = false
|
|
|
273
283
|
|
|
274
284
|
module_eval(<<'.,.,', 'code_section.y', 33)
|
|
275
285
|
def _reduce_7(val, _values, result)
|
|
276
|
-
def_function(val[1], val[2], val[3])
|
|
286
|
+
def_function(val[1].to_sym, val[2], val[3])
|
|
277
287
|
result
|
|
278
288
|
end
|
|
279
289
|
.,.,
|
|
@@ -308,7 +318,7 @@ module_eval(<<'.,.,', 'code_section.y', 39)
|
|
|
308
318
|
|
|
309
319
|
module_eval(<<'.,.,', 'code_section.y', 41)
|
|
310
320
|
def _reduce_12(val, _values, result)
|
|
311
|
-
def_variable(val[0], val[2])
|
|
321
|
+
def_variable(val[0].to_sym, val[2])
|
|
312
322
|
result
|
|
313
323
|
end
|
|
314
324
|
.,.,
|
|
@@ -326,76 +336,69 @@ module_eval(<<'.,.,', 'code_section.y', 45)
|
|
|
326
336
|
|
|
327
337
|
module_eval(<<'.,.,', 'code_section.y', 46)
|
|
328
338
|
def _reduce_16(val, _values, result)
|
|
329
|
-
result =
|
|
339
|
+
result = string(val[0])
|
|
330
340
|
result
|
|
331
341
|
end
|
|
332
342
|
.,.,
|
|
333
343
|
|
|
334
344
|
module_eval(<<'.,.,', 'code_section.y', 47)
|
|
335
345
|
def _reduce_17(val, _values, result)
|
|
336
|
-
result =
|
|
346
|
+
result = number(val[0])
|
|
337
347
|
result
|
|
338
348
|
end
|
|
339
349
|
.,.,
|
|
340
350
|
|
|
341
351
|
module_eval(<<'.,.,', 'code_section.y', 48)
|
|
342
352
|
def _reduce_18(val, _values, result)
|
|
343
|
-
result =
|
|
353
|
+
result = boolean(true)
|
|
344
354
|
result
|
|
345
355
|
end
|
|
346
356
|
.,.,
|
|
347
357
|
|
|
348
358
|
module_eval(<<'.,.,', 'code_section.y', 49)
|
|
349
359
|
def _reduce_19(val, _values, result)
|
|
350
|
-
result = boolean(
|
|
360
|
+
result = boolean(false)
|
|
351
361
|
result
|
|
352
362
|
end
|
|
353
363
|
.,.,
|
|
354
364
|
|
|
355
365
|
module_eval(<<'.,.,', 'code_section.y', 50)
|
|
356
366
|
def _reduce_20(val, _values, result)
|
|
357
|
-
result =
|
|
367
|
+
result = reference(ref: val[0])
|
|
358
368
|
result
|
|
359
369
|
end
|
|
360
370
|
.,.,
|
|
361
371
|
|
|
362
|
-
module_eval(<<'.,.,', 'code_section.y',
|
|
372
|
+
module_eval(<<'.,.,', 'code_section.y', 52)
|
|
363
373
|
def _reduce_21(val, _values, result)
|
|
364
|
-
result =
|
|
374
|
+
result = function_call(val[1].to_sym, [val[0], val[2]], infix: true)
|
|
365
375
|
result
|
|
366
376
|
end
|
|
367
377
|
.,.,
|
|
368
378
|
|
|
369
|
-
module_eval(<<'.,.,', 'code_section.y',
|
|
379
|
+
module_eval(<<'.,.,', 'code_section.y', 54)
|
|
370
380
|
def _reduce_22(val, _values, result)
|
|
371
|
-
result = function_call(val[
|
|
381
|
+
result = function_call(val[0].to_sym, val[2])
|
|
372
382
|
result
|
|
373
383
|
end
|
|
374
384
|
.,.,
|
|
375
385
|
|
|
376
386
|
module_eval(<<'.,.,', 'code_section.y', 55)
|
|
377
387
|
def _reduce_23(val, _values, result)
|
|
378
|
-
result = function_call(val[0],
|
|
388
|
+
result = function_call(val[0].to_sym, [])
|
|
379
389
|
result
|
|
380
390
|
end
|
|
381
391
|
.,.,
|
|
382
392
|
|
|
383
|
-
module_eval(<<'.,.,', 'code_section.y',
|
|
393
|
+
module_eval(<<'.,.,', 'code_section.y', 57)
|
|
384
394
|
def _reduce_24(val, _values, result)
|
|
385
|
-
result =
|
|
395
|
+
result = val[0] << val[2]
|
|
386
396
|
result
|
|
387
397
|
end
|
|
388
398
|
.,.,
|
|
389
399
|
|
|
390
400
|
module_eval(<<'.,.,', 'code_section.y', 58)
|
|
391
401
|
def _reduce_25(val, _values, result)
|
|
392
|
-
result = val[0] << val[2]
|
|
393
|
-
result
|
|
394
|
-
end
|
|
395
|
-
.,.,
|
|
396
|
-
|
|
397
|
-
module_eval(<<'.,.,', 'code_section.y', 59)
|
|
398
|
-
def _reduce_26(val, _values, result)
|
|
399
402
|
result = [val[0]]
|
|
400
403
|
result
|
|
401
404
|
end
|