cel 0.2.3 → 0.3.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.
@@ -1,1023 +0,0 @@
1
- #
2
- # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.7.1
4
- # from Racc grammar file "".
5
- #
6
-
7
- require "racc/parser"
8
-
9
- require "strscan"
10
- require "bigdecimal"
11
- require "cel/ast/elements"
12
- module Cel
13
- class Parser < Racc::Parser
14
- module_eval(<<~'...END PARSER.RY/MODULE_EVAL...', __FILE__, __LINE__ + 1)
15
-
16
-
17
-
18
- OPERATORS = if RUBY_VERSION < "2.7.0"
19
- {
20
- "&&" => :tANDOP,
21
- "||" => :tOROP,
22
- "+" => :tADDOP,
23
- "-" => :tSUBOP,
24
- }.merge(Hash[Cel::LOGICAL_OPERATORS.map{|op| [op, :tRELOP] }])
25
- .merge(Hash[Cel::MULTI_OPERATORS.map{|op| [op, :tMULTIOP] }])
26
- else
27
- {
28
- **Hash[Cel::LOGICAL_OPERATORS.map{|op| [op, :tRELOP] }],
29
- **Hash[Cel::MULTI_OPERATORS.map{|op| [op, :tMULTIOP] }],
30
- "&&" => :tANDOP,
31
- "||" => :tOROP,
32
- "+" => :tADDOP,
33
- "-" => :tSUBOP,
34
- }
35
- end.freeze
36
-
37
- OPERATORS_RE = Regexp.union(*OPERATORS.keys)
38
-
39
- RESERVED = %W[
40
- as break const continue else
41
- for function if import let
42
- loop package namespace return
43
- var void while
44
- ].freeze
45
-
46
- IDENTIFIER_REGEX = /[a-zA-Z][_a-zA-Z0-9]*/
47
-
48
- STRING_LIT_REGEX = Regexp.union(
49
- /"""(?~""")*"""/,
50
- /'''(?~''')*'''/,
51
- /"(\\"|[^"])*"/,
52
- /'(\\'|[^'])*'/,
53
- )
54
-
55
- NUMBER_REGEX = Regexp.union(
56
- /(0x[0-9a-fA-F]+)[uU]?/, # hexadecimal
57
- /(\d+)[uU]/, # uinteger
58
- /((\d*\.\d+)|\d+)([eE][+\-]?\d+)?/, # integer, float, exponent
59
- )
60
-
61
- def parse(str)
62
- tokenize(str)
63
- do_parse
64
- rescue Racc::ParseError => err
65
- raise parse_error(err)
66
- end
67
-
68
- def parse_error(error)
69
- parse_error = case error.message
70
- when /parse error on value "([^"]+)" \(tRESERVED\)/
71
- Cel::ParseError.new("invalid usage of the reserved word \"#{$1}\"")
72
- else
73
- Cel::ParseError.new(error.message)
74
- end
75
- parse_error.set_backtrace(error.backtrace)
76
- parse_error
77
- end
78
-
79
- def tokenize(str)
80
- str.force_encoding(Encoding::BINARY) unless str.valid_encoding?
81
-
82
- scanner = StringScanner.new(str)
83
-
84
- @q = []
85
-
86
- until scanner.eos?
87
- case
88
- when scanner.scan(/\s+/)
89
- # skip whitespace
90
- when scanner.scan(/#(( *)|( ?(?<string>.*)))\n/)
91
- # skip comment lines
92
- when scanner.scan(NUMBER_REGEX)
93
- @q << convert_to_number(scanner)
94
- when scanner.scan(/[bB]?[rR]?#{STRING_LIT_REGEX}/) # string
95
- # s = scanner.matched.yield_self {|s| s[1, s.length - 2] }
96
- # .gsub(DBL_QUOTE_STR_ESCAPE_SEQUENCES_RE) do |match|
97
- # case match
98
- # when '\\a' then "\a"
99
- # when '\\b' then "\b"
100
- # when '\\e' then "\e"
101
- # when '\\f' then "\f"
102
- # when '\\n' then "\n"
103
- # when '\\r' then "\r"
104
- # when '\\s' then "\s"
105
- # when '\\t' then "\t"
106
- # when '\\v' then "\v"
107
- # when '\\"' then '"'
108
- # end
109
- # end
110
-
111
- # s = scanner.matched.yield_self {|s| s[1, s.length - 2] }.gsub(/\\'/, "'")
112
-
113
- str = scanner.matched
114
-
115
- @q << if str.start_with?("b")
116
- [:tBYTES, convert_to_bytes(str.byteslice(2..-2))]
117
- else
118
- [:tSTRING, convert_to_string(str)]
119
- end
120
- when scanner.scan(IDENTIFIER_REGEX)
121
- word = scanner.matched
122
- if word == "null"
123
- @q << [:tNULL, nil]
124
- elsif word == "true"
125
- @q << [:tBOOL, true]
126
- elsif word == "false"
127
- @q << [:tBOOL, false]
128
- elsif RESERVED.include?(word)
129
- @q << [:tRESERVED, scanner.matched]
130
- elsif word == "in"
131
- @q << [OPERATORS[scanner.matched], scanner.matched]
132
- else
133
- @q << [:tIDENTIFIER, scanner.matched]
134
- end
135
- when scanner.scan(OPERATORS_RE)
136
- @q << [OPERATORS[scanner.matched], scanner.matched]
137
- when scanner.scan(/\A.|\n/o)
138
- s = scanner.matched
139
- @q << [s, s]
140
- else
141
- raise ParseError, "unexpected value: #{scanner.string}"
142
- end
143
- end
144
- @q << [:tEOF, false]
145
- end
146
-
147
- def next_token
148
- @q.shift
149
- end
150
-
151
- def convert_to_number(scanner)
152
- matched = scanner.matched
153
- hexa, uint, number, floating, exp = scanner.captures
154
-
155
- if hexa && !hexa.empty?
156
- return [:tINT, hexa.to_i(16)]
157
- end
158
-
159
- if uint && !uint.empty?
160
- return [:tUINT, Integer(uint)]
161
- end
162
-
163
- if exp && !exp.empty?
164
- # third matched group, can only be a floating exponential, let's convert tout suite
165
- [:tDOUBLE, BigDecimal(matched)]
166
- elsif floating && !floating.empty?
167
- if number == floating || floating.start_with?(".")
168
- [:tDOUBLE, Float(matched)]
169
- elsif number.nil? || number.empty?
170
- [:tDOUBLE, BigDecimal(matched)]
171
- end
172
- else
173
- if matched[-1].downcase == "u"
174
- [:tINT, Integer(matched[0..-2]).abs]
175
- else
176
- [:tINT, Integer(matched)]
177
- end
178
- end
179
- end
180
-
181
- TRIPE_DOUBLE_QUOTES = %Q{"""}
182
- TRIPE_SINGLE_QUOTES = %Q{'''}
183
-
184
- def convert_to_string(str)
185
-
186
- if str.start_with?("r")
187
- # If preceded by an r or R character, the string is a raw string
188
- # and does not interpret escape sequences.
189
- str = str.byteslice(2..-2).inspect.byteslice(1..-2)
190
- return str
191
- end
192
-
193
- if str.size > 6 && (
194
- (str.start_with?(TRIPE_DOUBLE_QUOTES) && str.end_with?(TRIPE_DOUBLE_QUOTES)) ||
195
- (str.start_with?(TRIPE_SINGLE_QUOTES) && str.end_with?(TRIPE_SINGLE_QUOTES)))
196
- str = str.byteslice(3..-4)
197
- else
198
- str = str.byteslice(1..-2)
199
- end
200
-
201
- cleanup_escape_sequences(str)
202
- end
203
-
204
- def convert_to_bytes(str)
205
- str.unpack("C*")
206
- end
207
-
208
-
209
- BIN_ESCAPE = /\\([0-3][0-7][0-7])/
210
- HEX_ESCAPE = /\\x([0-9a-fA-F]{2})/
211
- BPM_ESCAPE = /\\u([0-9a-fA-F]{4})/
212
- UNICODE_ESCAPE = /\\u([0-9a-fA-F]{4})/
213
- WHITESPACE_ESCAPE = /\\([bfnrt"'\\])/
214
- ESCAPE_UNION = Regexp.union(BIN_ESCAPE, HEX_ESCAPE, BPM_ESCAPE, WHITESPACE_ESCAPE)
215
- # For the sake of a readable representation, the escape sequences (ESCAPE) are kept
216
- # implicit in string tokens. This means that strings without the r or R (raw) prefix
217
- # process ESCAPE sequences, while in strings with the raw prefix they stay uninterpreted.
218
- # See documentation of string literals below.
219
- def cleanup_escape_sequences(str)
220
- str.gsub!(ESCAPE_UNION) do |match|
221
- case match
222
- when /\\"/
223
- "\""
224
- when BIN_ESCAPE
225
- # For strings, it denotes the unicode code point.
226
- Regexp.last_match(1).to_i.chr(Encoding::UTF_8)
227
- when HEX_ESCAPE
228
- # For strings, it denotes the unicode code point.
229
- Regexp.last_match(1).hex.chr(Encoding::UTF_8)
230
- when BPM_ESCAPE
231
- Regexp.last_match(1).hex.chr(Encoding::BPM)
232
- when UNICODE_ESCAPE
233
- # encoding a Unicode code point. Valid only for string literals.
234
- Regexp.last_match(1).hex.chr(Encoding::UTF_8)
235
- when WHITESPACE_ESCAPE
236
- Regexp.last_match(0)
237
- end
238
- end
239
- str
240
- end
241
-
242
- ...END PARSER.RY/MODULE_EVAL...
243
- ##### State transition tables begin ###
244
-
245
- racc_action_table = [
246
- 22, 23, 24, 25, 26, 27, 28, 38, 20, 29,
247
- 39, 13, 40, 38, 32, 4, 39, 31, 40, 12,
248
- 21, 16, 4, 17, 33, 18, 22, 23, 24, 25,
249
- 26, 27, 28, 38, 20, 32, 39, 34, 40, 78,
250
- 35, 36, 35, 36, 37, 42, 21, 16, 47, 17,
251
- 55, 18, 22, 23, 24, 25, 26, 27, 28, 56,
252
- 20, 64, 68, 45, 72, 73, 74, 75, 76, 77,
253
- 33, 34, 21, 16, 37, 17, 37, 18, 22, 23,
254
- 24, 25, 26, 27, 28, 79, 20, 80, 81, 13,
255
- 82, 83, 84, 90, 92, 93, 94, 12, 21, 16,
256
- nil, 17, nil, 18, 22, 23, 24, 25, 26, 27,
257
- 28, nil, 20, nil, nil, 13, nil, nil, nil, nil,
258
- nil, nil, nil, 12, 21, 16, nil, 17, nil, 18,
259
- 22, 23, 24, 25, 26, 27, 28, nil, 20, nil,
260
- nil, 13, nil, nil, nil, nil, nil, nil, nil, 12,
261
- 21, 16, nil, 17, nil, 18, 22, 23, 24, 25,
262
- 26, 27, 28, nil, 20, nil, nil, 13, nil, nil,
263
- nil, nil, nil, nil, nil, 12, 21, 16, nil, 17,
264
- nil, 18, 22, 23, 24, 25, 26, 27, 28, nil,
265
- 20, nil, nil, 13, nil, nil, nil, nil, nil, nil,
266
- nil, 12, 21, 16, nil, 17, nil, 18, 22, 23,
267
- 24, 25, 26, 27, 28, nil, 20, nil, nil, 13,
268
- nil, nil, nil, nil, nil, nil, nil, 12, 21, 16,
269
- nil, 17, nil, 18, 22, 23, 24, 25, 26, 27,
270
- 28, nil, 20, nil, nil, 13, nil, nil, nil, nil,
271
- nil, nil, nil, 12, 21, 16, nil, 17, nil, 18,
272
- 22, 23, 24, 25, 26, 27, 28, nil, 20, nil,
273
- nil, 13, nil, nil, nil, nil, nil, nil, nil, 12,
274
- 21, 16, nil, 17, nil, 18, 22, 23, 24, 25,
275
- 26, 27, 28, nil, 20, nil, nil, 13, nil, nil,
276
- nil, nil, nil, nil, nil, 12, 21, 16, nil, 17,
277
- nil, 18, 22, 23, 24, 25, 26, 27, 28, nil,
278
- 20, nil, nil, 13, nil, nil, nil, nil, nil, nil,
279
- nil, 12, 21, 16, nil, 17, nil, 18, 22, 23,
280
- 24, 25, 26, 27, 28, nil, 20, nil, nil, 13,
281
- nil, nil, nil, nil, nil, nil, nil, 12, 21, 16,
282
- nil, 17, nil, 18, 22, 23, 24, 25, 26, 27,
283
- 28, nil, 20, nil, nil, nil, nil, nil, nil, nil,
284
- nil, nil, nil, 42, 21, 16, nil, 17, nil, 18,
285
- 22, 23, 24, 25, 26, 27, 28, nil, 20, nil,
286
- nil, 45, nil, nil, nil, nil, nil, nil, nil, nil,
287
- 21, 16, nil, 17, nil, 18, 22, 23, 24, 25,
288
- 26, 27, 28, nil, 20, nil, nil, 13, nil, nil,
289
- nil, nil, nil, nil, nil, 12, 21, 16, nil, 17,
290
- nil, 18, 22, 23, 24, 25, 26, 27, 28, nil,
291
- 20, nil, nil, 13, nil, nil, nil, nil, nil, nil,
292
- nil, 12, 21, 16, nil, 17, nil, 18, 22, 23,
293
- 24, 25, 26, 27, 28, nil, 20, nil, nil, 13,
294
- nil, nil, nil, nil, nil, nil, nil, 12, 21, 16,
295
- nil, 17, nil, 18, 22, 23, 24, 25, 26, 27,
296
- 28, nil, 20, nil, nil, 13, nil, nil, nil, nil,
297
- nil, nil, nil, 12, 21, 16, nil, 17, nil, 18,
298
- 22, 23, 24, 25, 26, 27, 28, nil, 20, nil,
299
- nil, 13, nil, nil, nil, nil, nil, nil, nil, 12,
300
- 21, 16, nil, 17, nil, 18, 22, 23, 24, 25,
301
- 26, 27, 28, nil, 20, nil, nil, 13, nil, nil,
302
- nil, nil, nil, nil, nil, 12, 21, 16, nil, 17,
303
- nil, 18, 22, 23, 24, 25, 26, 27, 28, nil,
304
- 20, nil, nil, 13, nil, nil, nil, nil, nil, nil,
305
- nil, 12, 21, 16, nil, 17, nil, 18, 22, 23,
306
- 24, 25, 26, 27, 28, nil, 20, nil, nil, 13,
307
- nil, nil, nil, nil, nil, nil, nil, 12, 21, 16,
308
- nil, 17, nil, 18, 22, 23, 24, 25, 26, 27,
309
- 28, nil, 20, nil, nil, 13, nil, nil, nil, nil,
310
- nil, nil, nil, 12, 21, 16, nil, 17, nil, 18
311
- ]
312
-
313
- racc_action_check = [
314
- 0, 0, 0, 0, 0, 0, 0, 11, 0, 1,
315
- 11, 0, 11, 43, 5, 0, 43, 5, 43, 0,
316
- 0, 0, 2, 0, 6, 0, 12, 12, 12, 12,
317
- 12, 12, 12, 46, 12, 57, 46, 7, 46, 57,
318
- 8, 8, 60, 60, 9, 12, 12, 12, 15, 12,
319
- 21, 12, 13, 13, 13, 13, 13, 13, 13, 29,
320
- 13, 38, 40, 13, 48, 49, 50, 52, 53, 54,
321
- 58, 59, 13, 13, 61, 13, 62, 13, 16, 16,
322
- 16, 16, 16, 16, 16, 64, 16, 65, 66, 16,
323
- 67, 68, 71, 82, 86, 89, 90, 16, 16, 16,
324
- nil, 16, nil, 16, 17, 17, 17, 17, 17, 17,
325
- 17, nil, 17, nil, nil, 17, nil, nil, nil, nil,
326
- nil, nil, nil, 17, 17, 17, nil, 17, nil, 17,
327
- 18, 18, 18, 18, 18, 18, 18, nil, 18, nil,
328
- nil, 18, nil, nil, nil, nil, nil, nil, nil, 18,
329
- 18, 18, nil, 18, nil, 18, 31, 31, 31, 31,
330
- 31, 31, 31, nil, 31, nil, nil, 31, nil, nil,
331
- nil, nil, nil, nil, nil, 31, 31, 31, nil, 31,
332
- nil, 31, 32, 32, 32, 32, 32, 32, 32, nil,
333
- 32, nil, nil, 32, nil, nil, nil, nil, nil, nil,
334
- nil, 32, 32, 32, nil, 32, nil, 32, 33, 33,
335
- 33, 33, 33, 33, 33, nil, 33, nil, nil, 33,
336
- nil, nil, nil, nil, nil, nil, nil, 33, 33, 33,
337
- nil, 33, nil, 33, 34, 34, 34, 34, 34, 34,
338
- 34, nil, 34, nil, nil, 34, nil, nil, nil, nil,
339
- nil, nil, nil, 34, 34, 34, nil, 34, nil, 34,
340
- 35, 35, 35, 35, 35, 35, 35, nil, 35, nil,
341
- nil, 35, nil, nil, nil, nil, nil, nil, nil, 35,
342
- 35, 35, nil, 35, nil, 35, 36, 36, 36, 36,
343
- 36, 36, 36, nil, 36, nil, nil, 36, nil, nil,
344
- nil, nil, nil, nil, nil, 36, 36, 36, nil, 36,
345
- nil, 36, 37, 37, 37, 37, 37, 37, 37, nil,
346
- 37, nil, nil, 37, nil, nil, nil, nil, nil, nil,
347
- nil, 37, 37, 37, nil, 37, nil, 37, 39, 39,
348
- 39, 39, 39, 39, 39, nil, 39, nil, nil, 39,
349
- nil, nil, nil, nil, nil, nil, nil, 39, 39, 39,
350
- nil, 39, nil, 39, 42, 42, 42, 42, 42, 42,
351
- 42, nil, 42, nil, nil, nil, nil, nil, nil, nil,
352
- nil, nil, nil, 42, 42, 42, nil, 42, nil, 42,
353
- 45, 45, 45, 45, 45, 45, 45, nil, 45, nil,
354
- nil, 45, nil, nil, nil, nil, nil, nil, nil, nil,
355
- 45, 45, nil, 45, nil, 45, 47, 47, 47, 47,
356
- 47, 47, 47, nil, 47, nil, nil, 47, nil, nil,
357
- nil, nil, nil, nil, nil, 47, 47, 47, nil, 47,
358
- nil, 47, 74, 74, 74, 74, 74, 74, 74, nil,
359
- 74, nil, nil, 74, nil, nil, nil, nil, nil, nil,
360
- nil, 74, 74, 74, nil, 74, nil, 74, 76, 76,
361
- 76, 76, 76, 76, 76, nil, 76, nil, nil, 76,
362
- nil, nil, nil, nil, nil, nil, nil, 76, 76, 76,
363
- nil, 76, nil, 76, 77, 77, 77, 77, 77, 77,
364
- 77, nil, 77, nil, nil, 77, nil, nil, nil, nil,
365
- nil, nil, nil, 77, 77, 77, nil, 77, nil, 77,
366
- 78, 78, 78, 78, 78, 78, 78, nil, 78, nil,
367
- nil, 78, nil, nil, nil, nil, nil, nil, nil, 78,
368
- 78, 78, nil, 78, nil, 78, 79, 79, 79, 79,
369
- 79, 79, 79, nil, 79, nil, nil, 79, nil, nil,
370
- nil, nil, nil, nil, nil, 79, 79, 79, nil, 79,
371
- nil, 79, 83, 83, 83, 83, 83, 83, 83, nil,
372
- 83, nil, nil, 83, nil, nil, nil, nil, nil, nil,
373
- nil, 83, 83, 83, nil, 83, nil, 83, 92, 92,
374
- 92, 92, 92, 92, 92, nil, 92, nil, nil, 92,
375
- nil, nil, nil, nil, nil, nil, nil, 92, 92, 92,
376
- nil, 92, nil, 92, 94, 94, 94, 94, 94, 94,
377
- 94, nil, 94, nil, nil, 94, nil, nil, nil, nil,
378
- nil, nil, nil, 94, 94, 94, nil, 94, nil, 94
379
- ]
380
-
381
- racc_action_pointer = [
382
- -2, 9, 5, nil, nil, -2, 9, 23, 28, 33,
383
- nil, -15, 24, 50, nil, 25, 76, 102, 128, nil,
384
- nil, 40, nil, nil, nil, nil, nil, nil, nil, 59,
385
- nil, 154, 180, 206, 232, 258, 284, 310, 51, 336,
386
- 52, nil, 362, -9, nil, 388, 11, 414, 40, 39,
387
- 37, nil, 39, 39, 49, nil, nil, 19, 55, 57,
388
- 30, 63, 65, nil, 62, 61, 60, 61, 71, nil,
389
- nil, 68, nil, nil, 440, nil, 466, 492, 518, 544,
390
- nil, nil, 83, 570, nil, nil, 74, nil, nil, 71,
391
- 76, nil, 596, nil, 622, nil, nil
392
- ]
393
-
394
- racc_action_default = [
395
- -56, -56, -56, -2, -3, -5, -7, -9, -11, -14,
396
- -16, -17, -56, -56, -24, -29, -56, -38, -39, -34,
397
- -35, -56, -49, -50, -51, -52, -53, -54, -55, -56,
398
- -1, -56, -56, -56, -56, -56, -56, -56, -56, -56,
399
- -43, -18, -56, -21, -19, -56, -23, -38, -56, -56,
400
- -37, -42, -56, -40, -56, -36, 97, -56, -6, -8,
401
- -10, -12, -13, -15, -25, -56, -56, -44, -56, -20,
402
- -22, -56, -31, -32, -56, -33, -56, -56, -56, -38,
403
- -27, -28, -56, -56, -30, -41, -56, -48, -4, -56,
404
- -56, -46, -56, -26, -56, -47, -45
405
- ]
406
-
407
- racc_goto_table = [
408
- 2, 49, 43, 46, 44, 1, 3, 41, 30, 61,
409
- 62, 57, 58, 59, 60, 63, 48, 66, 54, 52,
410
- 53, 67, nil, nil, nil, nil, nil, nil, nil, nil,
411
- nil, 71, 43, nil, nil, 46, 70, 69, nil, 65,
412
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
413
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
414
- nil, nil, nil, 89, nil, nil, nil, nil, nil, nil,
415
- nil, nil, nil, nil, 85, nil, 86, 87, 88, nil,
416
- nil, nil, nil, 91, nil, nil, nil, nil, nil, nil,
417
- nil, nil, 95, nil, 96
418
- ]
419
-
420
- racc_goto_check = [
421
- 2, 14, 10, 10, 12, 1, 3, 11, 3, 8,
422
- 8, 4, 5, 6, 7, 9, 2, 15, 2, 17,
423
- 20, 21, nil, nil, nil, nil, nil, nil, nil, nil,
424
- nil, 14, 10, nil, nil, 10, 12, 11, nil, 2,
425
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
426
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
427
- nil, nil, nil, 14, nil, nil, nil, nil, nil, nil,
428
- nil, nil, nil, nil, 2, nil, 2, 2, 2, nil,
429
- nil, nil, nil, 2, nil, nil, nil, nil, nil, nil,
430
- nil, nil, 2, nil, 2
431
- ]
432
-
433
- racc_goto_pointer = [
434
- nil, 5, 0, 6, -20, -20, -20, -20, -26, -22,
435
- -10, -5, -9, nil, -16, -23, nil, 1, nil, nil,
436
- 2, -19
437
- ]
438
-
439
- racc_goto_default = [
440
- nil, nil, 51, nil, 5, 6, 7, 8, 9, 10,
441
- 11, nil, nil, 14, nil, nil, 15, nil, 19, 50,
442
- nil, nil
443
- ]
444
-
445
- racc_reduce_table = [
446
- 0, 0, :racc_error,
447
- 2, 31, :_reduce_none,
448
- 1, 31, :_reduce_none,
449
- 1, 33, :_reduce_none,
450
- 5, 32, :_reduce_4,
451
- 1, 32, :_reduce_none,
452
- 3, 34, :_reduce_6,
453
- 1, 34, :_reduce_none,
454
- 3, 35, :_reduce_8,
455
- 1, 35, :_reduce_none,
456
- 3, 36, :_reduce_10,
457
- 1, 36, :_reduce_none,
458
- 3, 37, :_reduce_12,
459
- 3, 37, :_reduce_13,
460
- 1, 37, :_reduce_none,
461
- 3, 38, :_reduce_15,
462
- 1, 38, :_reduce_none,
463
- 1, 39, :_reduce_none,
464
- 2, 39, :_reduce_18,
465
- 2, 39, :_reduce_19,
466
- 2, 41, :_reduce_20,
467
- 1, 41, :_reduce_none,
468
- 2, 42, :_reduce_22,
469
- 1, 42, :_reduce_none,
470
- 1, 40, :_reduce_none,
471
- 3, 40, :_reduce_25,
472
- 6, 40, :_reduce_26,
473
- 4, 40, :_reduce_27,
474
- 4, 40, :_reduce_28,
475
- 1, 43, :_reduce_29,
476
- 4, 43, :_reduce_30,
477
- 3, 43, :_reduce_31,
478
- 3, 43, :_reduce_32,
479
- 3, 43, :_reduce_33,
480
- 1, 43, :_reduce_none,
481
- 1, 46, :_reduce_none,
482
- 2, 46, :_reduce_none,
483
- 1, 44, :_reduce_none,
484
- 0, 44, :_reduce_38,
485
- 0, 47, :_reduce_39,
486
- 1, 47, :_reduce_none,
487
- 3, 49, :_reduce_41,
488
- 1, 49, :_reduce_42,
489
- 0, 45, :_reduce_43,
490
- 1, 45, :_reduce_none,
491
- 5, 51, :_reduce_45,
492
- 3, 51, :_reduce_46,
493
- 5, 50, :_reduce_47,
494
- 3, 50, :_reduce_48,
495
- 1, 48, :_reduce_49,
496
- 1, 48, :_reduce_50,
497
- 1, 48, :_reduce_51,
498
- 1, 48, :_reduce_52,
499
- 1, 48, :_reduce_53,
500
- 1, 48, :_reduce_54,
501
- 1, 48, :_reduce_55
502
- ]
503
-
504
- racc_reduce_n = 56
505
-
506
- racc_shift_n = 97
507
-
508
- racc_token_table = {
509
- false => 0,
510
- :error => 1,
511
- :tINT => 2,
512
- :tUINT => 3,
513
- :tDOUBLE => 4,
514
- :tBOOL => 5,
515
- :tNULL => 6,
516
- :tSTRING => 7,
517
- :tBYTES => 8,
518
- :tRESERVED => 9,
519
- :tIDENTIFIER => 10,
520
- :tMULTIOP => 11,
521
- :tADDOP => 12,
522
- :tSUBOP => 13,
523
- :tRELOP => 14,
524
- :tANDOP => 15,
525
- :tOROP => 16,
526
- :tEOF => 17,
527
- :UMINUS => 18,
528
- "?" => 19,
529
- ":" => 20,
530
- "!" => 21,
531
- "." => 22,
532
- "(" => 23,
533
- ")" => 24,
534
- "[" => 25,
535
- "]" => 26,
536
- "{" => 27,
537
- "}" => 28,
538
- "," => 29,
539
- }
540
-
541
- racc_nt_base = 30
542
-
543
- racc_use_result_var = true
544
-
545
- Racc_arg = [
546
- racc_action_table,
547
- racc_action_check,
548
- racc_action_default,
549
- racc_action_pointer,
550
- racc_goto_table,
551
- racc_goto_check,
552
- racc_goto_default,
553
- racc_goto_pointer,
554
- racc_nt_base,
555
- racc_reduce_table,
556
- racc_token_table,
557
- racc_shift_n,
558
- racc_reduce_n,
559
- racc_use_result_var,
560
- ]
561
- Ractor.make_shareable(Racc_arg) if defined?(Ractor)
562
-
563
- Racc_token_to_s_table = [
564
- "$end",
565
- "error",
566
- "tINT",
567
- "tUINT",
568
- "tDOUBLE",
569
- "tBOOL",
570
- "tNULL",
571
- "tSTRING",
572
- "tBYTES",
573
- "tRESERVED",
574
- "tIDENTIFIER",
575
- "tMULTIOP",
576
- "tADDOP",
577
- "tSUBOP",
578
- "tRELOP",
579
- "tANDOP",
580
- "tOROP",
581
- "tEOF",
582
- "UMINUS",
583
- "\"?\"",
584
- "\":\"",
585
- "\"!\"",
586
- "\".\"",
587
- "\"(\"",
588
- "\")\"",
589
- "\"[\"",
590
- "\"]\"",
591
- "\"{\"",
592
- "\"}\"",
593
- "\",\"",
594
- "$start",
595
- "target",
596
- "expr",
597
- "eof",
598
- "conditional_or",
599
- "conditional_and",
600
- "relation",
601
- "addition",
602
- "multiplication",
603
- "unary",
604
- "member",
605
- "negated_member",
606
- "negative_member",
607
- "primary",
608
- "maybe_expr_list",
609
- "maybe_field_inits",
610
- "identifier",
611
- "maybe_map_inits",
612
- "literal",
613
- "expr_list",
614
- "map_inits",
615
- "field_inits",
616
- ]
617
- Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
618
-
619
- Racc_debug_parser = false
620
-
621
- ##### State transition tables end #####
622
-
623
- # reduce 0 omitted
624
-
625
- # reduce 1 omitted
626
-
627
- # reduce 2 omitted
628
-
629
- # reduce 3 omitted
630
-
631
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
632
- def _reduce_4(val, _values, result)
633
- result = Cel::Condition.new(val[0], val[2], val[4])
634
- result
635
- end
636
- .,.,
637
-
638
- # reduce 5 omitted
639
-
640
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
641
- def _reduce_6(val, _values, result)
642
- result = Cel::Operation.new(val[1], [val[0], val[2]])
643
- result
644
- end
645
- .,.,
646
-
647
- # reduce 7 omitted
648
-
649
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
650
- def _reduce_8(val, _values, result)
651
- result = Cel::Operation.new(val[1], [val[0], val[2]])
652
- result
653
- end
654
- .,.,
655
-
656
- # reduce 9 omitted
657
-
658
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
659
- def _reduce_10(val, _values, result)
660
- result = Cel::Operation.new(val[1], [val[0], val[2]])
661
- result
662
- end
663
- .,.,
664
-
665
- # reduce 11 omitted
666
-
667
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
668
- def _reduce_12(val, _values, result)
669
- result = Cel::Operation.new(val[1], [val[0], val[2]])
670
- result
671
- end
672
- .,.,
673
-
674
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
675
- def _reduce_13(val, _values, result)
676
- result = Cel::Operation.new(val[1], [val[0], val[2]])
677
- result
678
- end
679
- .,.,
680
-
681
- # reduce 14 omitted
682
-
683
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
684
- def _reduce_15(val, _values, result)
685
- result = Cel::Operation.new(val[1], [val[0], val[2]])
686
- result
687
- end
688
- .,.,
689
-
690
- # reduce 16 omitted
691
-
692
- # reduce 17 omitted
693
-
694
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
695
- def _reduce_18(val, _values, result)
696
- result = Cel::Operation.new("!", [val[1]])
697
- result
698
- end
699
- .,.,
700
-
701
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
702
- def _reduce_19(val, _values, result)
703
- result = Cel::Operation.new("-", [val[1]])
704
- result
705
- end
706
- .,.,
707
-
708
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
709
- def _reduce_20(val, _values, result)
710
- result = Cel::Operation.new("!", [val[1]])
711
- result
712
- end
713
- .,.,
714
-
715
- # reduce 21 omitted
716
-
717
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
718
- def _reduce_22(val, _values, result)
719
- result = Cel::Operation.new("-", [val[1]])
720
- result
721
- end
722
- .,.,
723
-
724
- # reduce 23 omitted
725
-
726
- # reduce 24 omitted
727
-
728
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
729
- def _reduce_25(val, _values, result)
730
- result = Cel::Invoke.new(var: val[0], func: val[2])
731
- result
732
- end
733
- .,.,
734
-
735
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
736
- def _reduce_26(val, _values, result)
737
- result = Cel::Invoke.new(var: val[0], func: val[2], args: [val[4]].flatten(1))
738
- result
739
- end
740
- .,.,
741
-
742
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
743
- def _reduce_27(val, _values, result)
744
- result = Cel::Invoke.new(var: val[0], func: "[]", args: val[2])
745
- result
746
- end
747
- .,.,
748
-
749
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
750
- def _reduce_28(val, _values, result)
751
- result = Cel::Message.new(val[0], val[2])
752
- result
753
- end
754
- .,.,
755
-
756
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
757
- def _reduce_29(val, _values, result)
758
- result = Cel::Identifier.new(val[0])
759
- result
760
- end
761
- .,.,
762
-
763
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
764
- def _reduce_30(val, _values, result)
765
- result = Cel::Invoke.new(func: val[0], args: [val[2]].flatten(1))
766
- result
767
- end
768
- .,.,
769
-
770
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
771
- def _reduce_31(val, _values, result)
772
- result = Cel::Group.new(val[1])
773
- result
774
- end
775
- .,.,
776
-
777
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
778
- def _reduce_32(val, _values, result)
779
- result = Cel::List.new(Array(val[1]))
780
- result
781
- end
782
- .,.,
783
-
784
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
785
- def _reduce_33(val, _values, result)
786
- result = Cel::Map.new(Hash[val[1]])
787
- result
788
- end
789
- .,.,
790
-
791
- # reduce 34 omitted
792
-
793
- # reduce 35 omitted
794
-
795
- # reduce 36 omitted
796
-
797
- # reduce 37 omitted
798
-
799
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
800
- def _reduce_38(val, _values, result)
801
- result = []
802
- result
803
- end
804
- .,.,
805
-
806
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
807
- def _reduce_39(val, _values, result)
808
- result = nil
809
- result
810
- end
811
- .,.,
812
-
813
- # reduce 40 omitted
814
-
815
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
816
- def _reduce_41(val, _values, result)
817
- result = Array(val[0]) << val[2]
818
- result
819
- end
820
- .,.,
821
-
822
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
823
- def _reduce_42(val, _values, result)
824
- [val[0]]
825
- result
826
- end
827
- .,.,
828
-
829
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
830
- def _reduce_43(val, _values, result)
831
- result = nil
832
- result
833
- end
834
- .,.,
835
-
836
- # reduce 44 omitted
837
-
838
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
839
- def _reduce_45(val, _values, result)
840
- result = val[0].merge(Cel::Identifier.new(val[2]) => val[4])
841
- result
842
- end
843
- .,.,
844
-
845
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
846
- def _reduce_46(val, _values, result)
847
- result = { Cel::Identifier.new(val[0]) => val[2] }
848
- result
849
- end
850
- .,.,
851
-
852
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
853
- def _reduce_47(val, _values, result)
854
- val[0][val[2]] = val[4]; result = val[0]
855
- result
856
- end
857
- .,.,
858
-
859
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
860
- def _reduce_48(val, _values, result)
861
- result = { val[0] => val[2] }
862
- result
863
- end
864
- .,.,
865
-
866
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
867
- def _reduce_49(val, _values, result)
868
- result = Cel::Number.new(:int, val[0])
869
- result
870
- end
871
- .,.,
872
-
873
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
874
- def _reduce_50(val, _values, result)
875
- result = Cel::Number.new(:uint, val[0])
876
- result
877
- end
878
- .,.,
879
-
880
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
881
- def _reduce_51(val, _values, result)
882
- result = Cel::Number.new(:double, val[0])
883
- result
884
- end
885
- .,.,
886
-
887
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
888
- def _reduce_52(val, _values, result)
889
- result = Cel::Bool.new(val[0])
890
- result
891
- end
892
- .,.,
893
-
894
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
895
- def _reduce_53(val, _values, result)
896
- result = Cel::Null.new()
897
- result
898
- end
899
- .,.,
900
-
901
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
902
- def _reduce_54(val, _values, result)
903
- result = Cel::String.new(val[0])
904
- result
905
- end
906
- .,.,
907
-
908
- module_eval(<<'.,.,', __FILE__, __LINE__ + 1)
909
- def _reduce_55(val, _values, result)
910
- result = Cel::Bytes.new(val[0])
911
- result
912
- end
913
- .,.,
914
-
915
- def _reduce_none(val, _values, _result)
916
- val[0]
917
- end
918
- end # class Parser
919
- end # module Cel
920
-
921
- # if $0 == __FILE__
922
- # examples = <<EOS
923
- # 123
924
- # 12345
925
- # 1.2
926
- # 1e2
927
- # -1.2e2
928
- # 12u
929
- # 0xa123
930
- # ""
931
- # '""'
932
- # '''x''x'''
933
- # "\""
934
- # "\\"
935
- # r"\\"
936
- # b"abc"
937
- # b"ÿ"
938
- # b"\303\277"
939
- # "\303\277"
940
- # "\377"
941
- # b"\377"
942
- # "\xFF"
943
- # b"\xFF"
944
-
945
- # 1 + 2
946
- # 3 - 2
947
- # " Some String with \"escapes\""
948
- # 'another string'
949
- # a.b.c == 1
950
- # d > 2
951
- # a.b.c * 3 == 1 && d > 2
952
- # a.b.c
953
- # wiri
954
- # // a.driving_license = "CA"
955
- # // 1 = 2
956
- # // 2 = "a"
957
- # // a.b.c > "a"
958
- # EOS
959
- # puts 'Parsing...'
960
- # parser = Cel::Parser.new
961
- # examples.each_line do |line|
962
- # puts "line: #{line.inspect}"
963
- # puts parser.parse(line)
964
- # end
965
- # end
966
-
967
- # The grammar of CEL is defined below, using | for alternatives, [] for optional, {} for repeated, and () for grouping.
968
- # Expr = ConditionalOr ["?" ConditionalOr ":" Expr] ;
969
- # ConditionalOr = [ConditionalOr "||"] ConditionalAnd ;
970
- # ConditionalAnd = [ConditionalAnd "&&"] Relation ;
971
- # Relation = [Relation Relop] Addition ;
972
- # Relop = "<" | "<=" | ">=" | ">" | "==" | "!=" | "in" ;
973
- # Addition = [Addition ("+" | "-")] Multiplication ;
974
- # Multiplication = [Multiplication ("*" | "/" | "%")] Unary ;
975
- # Unary = Member
976
- # | "!" {"!"} Member
977
- # | "-" {"-"} Member
978
- # ;
979
- # Member = Primary
980
- # | Member "." IDENT ["(" [ExprList] ")"]
981
- # | Member "[" Expr "]"
982
- # | Member "{" [FieldInits] "}"
983
- # ;
984
- # Primary = ["."] IDENT ["(" [ExprList] ")"]
985
- # | "(" Expr ")"
986
- # | "[" [ExprList] "]"
987
- # | "{" [MapInits] "}"
988
- # | LITERAL
989
- # ;
990
- # ExprList = Expr {"," Expr} ;
991
- # FieldInits = IDENT ":" Expr {"," IDENT ":" Expr} ;
992
- # MapInits = Expr ":" Expr {"," Expr ":" Expr} ;
993
-
994
- # IDENT ::= [_a-zA-Z][_a-zA-Z0-9]* - RESERVED
995
- # LITERAL ::= INT_LIT | UINT_LIT | FLOAT_LIT | STRING_LIT | BYTES_LIT
996
- # | BOOL_LIT | NULL_LIT
997
- # INT_LIT ::= -? DIGIT+ | -? 0x HEXDIGIT+
998
- # UINT_LIT ::= INT_LIT [uU]
999
- # FLOAT_LIT ::= -? DIGIT* . DIGIT+ EXPONENT? | -? DIGIT+ EXPONENT
1000
- # DIGIT ::= [0-9]
1001
- # HEXDIGIT ::= [0-9abcdefABCDEF]
1002
- # EXPONENT ::= [eE] [+-]? DIGIT+
1003
- # STRING_LIT ::= [rR]? ( " ~( " | NEWLINE )* "
1004
- # | ' ~( ' | NEWLINE )* '
1005
- # | """ ~"""* """
1006
- # | ''' ~'''* '''
1007
- # )
1008
- # BYTES_LIT ::= [bB] STRING_LIT
1009
- # ESCAPE ::= \ [bfnrt"'\]
1010
- # | \ x HEXDIGIT HEXDIGIT
1011
- # | \ u HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT
1012
- # | \ U HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT
1013
- # | \ [0-3] [0-7] [0-7]
1014
- # NEWLINE ::= \r\n | \r | \n
1015
- # BOOL_LIT ::= "true" | "false"
1016
- # NULL_LIT ::= "null"
1017
- # RESERVED ::= BOOL_LIT | NULL_LIT | "in"
1018
- # | "as" | "break" | "const" | "continue" | "else"
1019
- # | "for" | "function" | "if" | "import" | "let"
1020
- # | "loop" | "package" | "namespace" | "return"
1021
- # | "var" | "void" | "while"
1022
- # WHITESPACE ::= [\t\n\f\r ]+
1023
- # COMMENT ::= '//' ~NEWLINE* NEWLINE