template-ruby 0.5.6 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/Gemfile.lock +15 -22
  4. data/bin/template +12 -3
  5. data/lib/template/version.rb +1 -1
  6. data/lib/template-ruby.rb +2 -3
  7. data/lib/template.rb +18 -22
  8. data/spec/spec_helper.rb +0 -5
  9. data/spec/template_spec.rb +13 -0
  10. data/template-ruby.gemspec +2 -0
  11. metadata +33 -219
  12. data/.cherry.js +0 -21
  13. data/.editorconfig +0 -9
  14. data/.github/workflows/rspec.yml +0 -14
  15. data/.gitignore +0 -2
  16. data/.prettierrc +0 -3
  17. data/.tool-versions +0 -1
  18. data/CHANGELOG.md +0 -55
  19. data/LICENSE +0 -7
  20. data/README.md +0 -103
  21. data/TODO +0 -17
  22. data/bin/code +0 -76
  23. data/bin/format +0 -3
  24. data/bin/publish +0 -19
  25. data/bin/test +0 -17
  26. data/code-ruby.gemspec +0 -17
  27. data/docs/class.code +0 -9
  28. data/docs/euler/1.template +0 -10
  29. data/docs/euler/2.template +0 -16
  30. data/docs/euler/3.template +0 -16
  31. data/docs/euler/4.template +0 -10
  32. data/docs/euler/5.template +0 -13
  33. data/docs/fibonnaci.template +0 -14
  34. data/docs/meetup.code +0 -12
  35. data/docs/precedence.template +0 -36
  36. data/docs/rain.code +0 -22
  37. data/docs/slack.code +0 -17
  38. data/docs/stripe.code +0 -7
  39. data/docs/twitter.code +0 -9
  40. data/language-ruby.gemspec +0 -17
  41. data/lib/code/error.rb +0 -18
  42. data/lib/code/node/base_10.rb +0 -29
  43. data/lib/code/node/base_16.rb +0 -13
  44. data/lib/code/node/base_2.rb +0 -13
  45. data/lib/code/node/base_8.rb +0 -13
  46. data/lib/code/node/boolean.rb +0 -22
  47. data/lib/code/node/call.rb +0 -47
  48. data/lib/code/node/call_argument.rb +0 -21
  49. data/lib/code/node/chained_call.rb +0 -23
  50. data/lib/code/node/code.rb +0 -20
  51. data/lib/code/node/decimal.rb +0 -26
  52. data/lib/code/node/dictionnary.rb +0 -33
  53. data/lib/code/node/equal.rb +0 -34
  54. data/lib/code/node/function.rb +0 -20
  55. data/lib/code/node/function_parameter.rb +0 -31
  56. data/lib/code/node/if.rb +0 -59
  57. data/lib/code/node/if_modifier.rb +0 -47
  58. data/lib/code/node/list.rb +0 -16
  59. data/lib/code/node/negation.rb +0 -15
  60. data/lib/code/node/not.rb +0 -15
  61. data/lib/code/node/nothing.rb +0 -12
  62. data/lib/code/node/number.rb +0 -25
  63. data/lib/code/node/operation.rb +0 -38
  64. data/lib/code/node/power.rb +0 -20
  65. data/lib/code/node/rescue.rb +0 -17
  66. data/lib/code/node/splat.rb +0 -15
  67. data/lib/code/node/statement.rb +0 -59
  68. data/lib/code/node/string.rb +0 -53
  69. data/lib/code/node/ternary.rb +0 -24
  70. data/lib/code/node/unary_minus.rb +0 -15
  71. data/lib/code/node/while.rb +0 -35
  72. data/lib/code/node.rb +0 -13
  73. data/lib/code/object/argument.rb +0 -32
  74. data/lib/code/object/boolean.rb +0 -27
  75. data/lib/code/object/decimal.rb +0 -162
  76. data/lib/code/object/dictionnary.rb +0 -96
  77. data/lib/code/object/function.rb +0 -64
  78. data/lib/code/object/global.rb +0 -42
  79. data/lib/code/object/integer.rb +0 -221
  80. data/lib/code/object/list.rb +0 -207
  81. data/lib/code/object/nothing.rb +0 -23
  82. data/lib/code/object/number.rb +0 -6
  83. data/lib/code/object/range.rb +0 -146
  84. data/lib/code/object/ruby_function.rb +0 -31
  85. data/lib/code/object/string.rb +0 -102
  86. data/lib/code/object.rb +0 -197
  87. data/lib/code/parser/addition.rb +0 -21
  88. data/lib/code/parser/and_operator.rb +0 -17
  89. data/lib/code/parser/bitwise_and.rb +0 -17
  90. data/lib/code/parser/bitwise_or.rb +0 -21
  91. data/lib/code/parser/boolean.rb +0 -17
  92. data/lib/code/parser/call.rb +0 -122
  93. data/lib/code/parser/chained_call.rb +0 -47
  94. data/lib/code/parser/class.rb +0 -45
  95. data/lib/code/parser/code.rb +0 -25
  96. data/lib/code/parser/dictionnary.rb +0 -67
  97. data/lib/code/parser/equal.rb +0 -94
  98. data/lib/code/parser/equality.rb +0 -35
  99. data/lib/code/parser/equality_lower.rb +0 -9
  100. data/lib/code/parser/function.rb +0 -85
  101. data/lib/code/parser/greater.rb +0 -25
  102. data/lib/code/parser/group.rb +0 -22
  103. data/lib/code/parser/if.rb +0 -63
  104. data/lib/code/parser/if_modifier.rb +0 -55
  105. data/lib/code/parser/list.rb +0 -42
  106. data/lib/code/parser/multiplication.rb +0 -25
  107. data/lib/code/parser/name.rb +0 -107
  108. data/lib/code/parser/negation.rb +0 -30
  109. data/lib/code/parser/not_keyword.rb +0 -23
  110. data/lib/code/parser/nothing.rb +0 -22
  111. data/lib/code/parser/number.rb +0 -154
  112. data/lib/code/parser/operation.rb +0 -35
  113. data/lib/code/parser/or_keyword.rb +0 -21
  114. data/lib/code/parser/or_operator.rb +0 -17
  115. data/lib/code/parser/power.rb +0 -43
  116. data/lib/code/parser/range.rb +0 -17
  117. data/lib/code/parser/rescue.rb +0 -39
  118. data/lib/code/parser/shift.rb +0 -21
  119. data/lib/code/parser/splat.rb +0 -31
  120. data/lib/code/parser/statement.rb +0 -9
  121. data/lib/code/parser/string.rb +0 -78
  122. data/lib/code/parser/ternary.rb +0 -46
  123. data/lib/code/parser/unary_minus.rb +0 -31
  124. data/lib/code/parser/while.rb +0 -36
  125. data/lib/code/parser/whitespace.rb +0 -49
  126. data/lib/code/parser.rb +0 -19
  127. data/lib/code/ruby.rb +0 -174
  128. data/lib/code-ruby.rb +0 -10
  129. data/lib/code.rb +0 -47
  130. data/lib/language/atom.rb +0 -342
  131. data/lib/language/output.rb +0 -130
  132. data/lib/language/parser/absent/present.rb +0 -8
  133. data/lib/language/parser/absent.rb +0 -6
  134. data/lib/language/parser/end_of_input.rb +0 -6
  135. data/lib/language/parser/interuption.rb +0 -38
  136. data/lib/language/parser/not_end_of_input.rb +0 -6
  137. data/lib/language/parser/str/not_found.rb +0 -16
  138. data/lib/language/parser/str.rb +0 -6
  139. data/lib/language/parser.rb +0 -53
  140. data/lib/language-ruby.rb +0 -10
  141. data/lib/language.rb +0 -80
  142. data/spec/code/addition_spec.rb +0 -13
  143. data/spec/code/and_operator_spec.rb +0 -13
  144. data/spec/code/bitwise_and_spec.rb +0 -13
  145. data/spec/code/bitwise_or_spec.rb +0 -13
  146. data/spec/code/boolean_spec.rb +0 -13
  147. data/spec/code/call_spec.rb +0 -21
  148. data/spec/code/chained_call_spec.rb +0 -16
  149. data/spec/code/code_spec.rb +0 -29
  150. data/spec/code/dictionnary_spec.rb +0 -17
  151. data/spec/code/equal_spec.rb +0 -26
  152. data/spec/code/equality_spec.rb +0 -13
  153. data/spec/code/function_spec.rb +0 -18
  154. data/spec/code/greater_spec.rb +0 -18
  155. data/spec/code/group_spec.rb +0 -12
  156. data/spec/code/if_modifier_spec.rb +0 -20
  157. data/spec/code/if_spec.rb +0 -25
  158. data/spec/code/list_spec.rb +0 -19
  159. data/spec/code/multiplication_spec.rb +0 -18
  160. data/spec/code/negation_spec.rb +0 -20
  161. data/spec/code/not_keyword_spec.rb +0 -13
  162. data/spec/code/nothing_spec.rb +0 -17
  163. data/spec/code/number_spec.rb +0 -22
  164. data/spec/code/or_keyword_spec.rb +0 -17
  165. data/spec/code/or_operator_spec.rb +0 -16
  166. data/spec/code/parser/boolean_spec.rb +0 -16
  167. data/spec/code/parser/call_spec.rb +0 -26
  168. data/spec/code/parser/chained_call.rb +0 -17
  169. data/spec/code/parser/dictionnary_spec.rb +0 -18
  170. data/spec/code/parser/function_spec.rb +0 -16
  171. data/spec/code/parser/group_spec.rb +0 -18
  172. data/spec/code/parser/list_spec.rb +0 -18
  173. data/spec/code/parser/number_spec.rb +0 -12
  174. data/spec/code/parser/string_spec.rb +0 -21
  175. data/spec/code/parser_spec.rb +0 -23
  176. data/spec/code/power_spec.rb +0 -13
  177. data/spec/code/range_spec.rb +0 -16
  178. data/spec/code/rescue_spec.rb +0 -13
  179. data/spec/code/shift_spec.rb +0 -13
  180. data/spec/code/splat_spec.rb +0 -13
  181. data/spec/code/string_spec.rb +0 -27
  182. data/spec/code/ternary_spec.rb +0 -18
  183. data/spec/code/unary_minus_spec.rb +0 -13
  184. data/spec/code/while_spec.rb +0 -18
data/lib/language/atom.rb DELETED
@@ -1,342 +0,0 @@
1
- class Language
2
- class Atom
3
- class Rule < Atom
4
- def initialize(name:)
5
- @name = name
6
- end
7
-
8
- def parse(parser)
9
- parser.find_rule!(@name).parse(parser)
10
- end
11
-
12
- def to_s
13
- "rule(#{@name.inspect})"
14
- end
15
- end
16
-
17
- class Any < Atom
18
- def parse(parser)
19
- parser.consume(1)
20
- end
21
-
22
- def to_s
23
- "any"
24
- end
25
- end
26
-
27
- class Then < Atom
28
- def initialize(parent:, block:)
29
- @parent = parent
30
- @block = block
31
- end
32
-
33
- def parse(parser)
34
- @parent.parse(parser)
35
- parser.output = Output.from_raw(@block.call(parser.output.to_raw))
36
- end
37
-
38
- def to_s
39
- "(#{@parent}).then {}"
40
- end
41
- end
42
-
43
- class Repeat < Atom
44
- def initialize(parent: nil, min: 0, max: nil)
45
- @parent = parent
46
- @min = min
47
- @max = max
48
- end
49
-
50
- def parse(parser)
51
- return unless @parent
52
-
53
- if @max.nil?
54
- @min.times { match(parser) }
55
-
56
- begin
57
- loop { match(parser) }
58
- rescue Parser::Interuption
59
- end
60
- else
61
- @min.times { match(parser) }
62
-
63
- begin
64
- (@max - @min).times { match(parser) }
65
- rescue Parser::Interuption
66
- end
67
- end
68
- end
69
-
70
- def to_s
71
- min = @min.zero? ? "" : @min.to_s
72
- max = @max.nil? ? "" : ", #{@max}"
73
- parenthesis = min.empty? && max.empty? ? "" : "(#{min}#{max})"
74
-
75
- @parent ? "(#{@parent}).repeat#{parenthesis}" : "repeat#{parenthesis}"
76
- end
77
-
78
- private
79
-
80
- def match(parser)
81
- clone =
82
- Parser.new(
83
- root: self,
84
- input: parser.input,
85
- cursor: parser.cursor,
86
- buffer: parser.buffer
87
- )
88
-
89
- @parent.parse(clone)
90
-
91
- parser.cursor = clone.cursor
92
- parser.buffer = clone.buffer
93
- parser.output << clone.output
94
- end
95
- end
96
-
97
- class Str < Atom
98
- def initialize(string:)
99
- @string = string
100
- end
101
-
102
- def parse(parser)
103
- if parser.next?(@string)
104
- parser.consume(@string.size)
105
- else
106
- raise Parser::Str::NotFound.new(parser, @string)
107
- end
108
- end
109
-
110
- def to_s
111
- "str(#{@string.inspect})"
112
- end
113
- end
114
-
115
- class Absent < Atom
116
- def initialize(parent: nil)
117
- @parent = parent
118
- end
119
-
120
- def parse(parser)
121
- clone =
122
- Parser.new(
123
- root: self,
124
- input: parser.input,
125
- cursor: parser.cursor,
126
- buffer: parser.buffer
127
- )
128
- @parent.parse(clone) if @parent
129
- rescue Parser::Interuption
130
- else
131
- raise Parser::Interuption.new(parser, self)
132
- end
133
-
134
- def to_s
135
- @parent ? "(#{@parent}).absent" : "absent"
136
- end
137
- end
138
-
139
- class Ignore < Atom
140
- def initialize(parent: nil)
141
- @parent = parent
142
- end
143
-
144
- def parse(parser)
145
- clone =
146
- Parser.new(
147
- root: self,
148
- input: parser.input,
149
- cursor: parser.cursor,
150
- buffer: parser.buffer
151
- )
152
- @parent.parse(clone) if @parent
153
- parser.cursor = clone.cursor
154
- end
155
-
156
- def to_s
157
- @parent ? "#{@parent}.ignore" : "ignore"
158
- end
159
- end
160
-
161
- class Maybe < Atom
162
- def initialize(parent:)
163
- @parent = parent
164
- end
165
-
166
- def parse(parser)
167
- clone =
168
- Parser.new(
169
- root: self,
170
- input: parser.input,
171
- cursor: parser.cursor,
172
- buffer: parser.buffer
173
- )
174
-
175
- @parent.parse(clone)
176
- rescue Parser::Interuption
177
- else
178
- parser.cursor = clone.cursor
179
- parser.output = clone.output
180
- end
181
-
182
- def to_s
183
- @parent ? "#{@parent}.maybe" : "maybe"
184
- end
185
- end
186
-
187
- class Aka < Atom
188
- def initialize(name:, parent:)
189
- @name = name
190
- @parent = parent
191
- end
192
-
193
- def parse(parser)
194
- clone =
195
- Parser.new(root: self, input: parser.input, cursor: parser.cursor)
196
-
197
- @parent.parse(clone)
198
-
199
- if clone.output?
200
- parser.output = Output.new(@name => clone.output)
201
- else
202
- parser.output[@name] = Output.new(clone.buffer)
203
- parser.buffer = ""
204
- end
205
-
206
- parser.cursor = clone.cursor
207
- end
208
-
209
- def to_s
210
- @parent ? "#{@parent}.aka(#{@name.inspect})" : "aka(#{@name.inspect})"
211
- end
212
- end
213
-
214
- class Or < Atom
215
- def initialize(left:, right:)
216
- @left = left
217
- @right = right
218
- end
219
-
220
- def parse(parser)
221
- left_clone =
222
- Parser.new(
223
- root: self,
224
- input: parser.input,
225
- cursor: parser.cursor,
226
- buffer: parser.buffer
227
- )
228
-
229
- right_clone =
230
- Parser.new(
231
- root: self,
232
- input: parser.input,
233
- cursor: parser.cursor,
234
- buffer: parser.buffer
235
- )
236
-
237
- begin
238
- @left.parse(left_clone)
239
- parser.cursor = left_clone.cursor
240
- parser.buffer = left_clone.buffer
241
- parser.output.merge(left_clone.output)
242
- rescue Parser::Interuption
243
- @right.parse(right_clone)
244
- parser.cursor = right_clone.cursor
245
- parser.buffer = right_clone.buffer
246
- parser.output.merge(right_clone.output)
247
- end
248
- end
249
-
250
- def to_s
251
- "((#{@left}) | (#{@right}))"
252
- end
253
- end
254
-
255
- class And < Atom
256
- def initialize(left:, right:)
257
- @left = left
258
- @right = right
259
- end
260
-
261
- def parse(parser)
262
- @left.parse(parser)
263
- right_clone =
264
- Parser.new(
265
- root: self,
266
- input: parser.input,
267
- cursor: parser.cursor,
268
- buffer: parser.buffer
269
- )
270
- @right.parse(right_clone)
271
- parser.cursor = right_clone.cursor
272
- parser.buffer = right_clone.buffer
273
-
274
- parser.output.merge(right_clone.output)
275
- end
276
-
277
- def to_s
278
- "#{@left} >> #{@right}".to_s
279
- end
280
- end
281
-
282
- def any
283
- Any.new
284
- end
285
-
286
- def str(string)
287
- Str.new(string: string)
288
- end
289
-
290
- def absent
291
- Absent.new(parent: self)
292
- end
293
-
294
- def ignore
295
- Ignore.new(parent: self)
296
- end
297
-
298
- def maybe
299
- Maybe.new(parent: self)
300
- end
301
-
302
- def repeat(min = 0, max = nil)
303
- Repeat.new(parent: self, min: min, max: max)
304
- end
305
-
306
- def aka(name)
307
- Aka.new(parent: self, name: name)
308
- end
309
-
310
- def |(other)
311
- Or.new(left: self, right: other)
312
- end
313
-
314
- def >>(other)
315
- And.new(left: self, right: other)
316
- end
317
-
318
- def <<(other)
319
- And.new(left: self, right: other)
320
- end
321
-
322
- def then(&block)
323
- Then.new(parent: self, block: block)
324
- end
325
-
326
- def rule(name)
327
- Rule.new(name: name)
328
- end
329
-
330
- def parse(parser)
331
- raise NotImplementedError.new("#{self.class}#parse")
332
- end
333
-
334
- def to_s
335
- ""
336
- end
337
-
338
- def inspect
339
- to_s
340
- end
341
- end
342
- end
@@ -1,130 +0,0 @@
1
- class Language
2
- class Output
3
- attr_reader :raw
4
-
5
- def initialize(raw = nil)
6
- @raw = raw
7
- end
8
-
9
- def self.from_raw(raw)
10
- if raw.is_a?(Array)
11
- new(raw.map { |element| from_raw(element) })
12
- elsif raw.is_a?(Hash)
13
- new(raw.map { |key, value| [key, from_raw(value)] }.to_h)
14
- else
15
- new(raw)
16
- end
17
- end
18
-
19
- def to_raw
20
- if raw.is_a?(Array)
21
- raw.map(&:to_raw)
22
- elsif raw.is_a?(Hash)
23
- raw.map { |key, value| [key, value.to_raw] }.to_h
24
- else
25
- raw
26
- end
27
- end
28
-
29
- def clone
30
- Output.new(@raw.clone)
31
- end
32
-
33
- def present?
34
- @raw != nil
35
- end
36
-
37
- def ==(other)
38
- other.is_a?(Output) ? raw == other.raw : raw == other
39
- end
40
-
41
- def to_s
42
- raw.to_s
43
- end
44
-
45
- def inspect
46
- raw.inspect
47
- end
48
-
49
- def []=(key, value)
50
- case @raw
51
- when NilClass
52
- @raw = { key => value }
53
- when String
54
- @raw = { key => value }
55
- when Array
56
- @raw << Output.new({ key => value })
57
- when Hash
58
- @raw[key] = value
59
- end
60
- end
61
-
62
- def merge(other)
63
- case @raw
64
- when NilClass
65
- @raw = other.raw
66
- when String
67
- case other.raw
68
- when String
69
- @raw = @raw + other.raw
70
- when Array
71
- @raw = other.raw
72
- when Hash
73
- @raw = other.raw
74
- end
75
- when Array
76
- case other.raw
77
- when String
78
- return
79
- when Array
80
- @raw = @raw + other.raw
81
- when Hash
82
- @raw << other
83
- end
84
- when Hash
85
- case other.raw
86
- when String
87
- return
88
- when Array
89
- return
90
- when Hash
91
- @raw.merge!(other.raw)
92
- end
93
- end
94
- end
95
-
96
- def <<(other)
97
- case @raw
98
- when NilClass
99
- case other.raw
100
- when String
101
- @raw = [other]
102
- when Array
103
- @raw = [other]
104
- when Hash
105
- @raw = [other]
106
- end
107
- when String
108
- case other.raw
109
- when String
110
- @raw = @raw + other.raw
111
- when Array
112
- @raw = [other]
113
- when Hash
114
- @raw = [other]
115
- end
116
- when Array
117
- @raw << other
118
- when Hash
119
- case other.raw
120
- when String
121
- return
122
- when Array
123
- return
124
- when Hash
125
- @raw.merge!(other.raw)
126
- end
127
- end
128
- end
129
- end
130
- end
@@ -1,8 +0,0 @@
1
- class Language
2
- class Parser
3
- class Absent
4
- class Present < Interuption
5
- end
6
- end
7
- end
8
- end
@@ -1,6 +0,0 @@
1
- class Language
2
- class Parser
3
- class Absent
4
- end
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- class Language
2
- class Parser
3
- class EndOfInput < Interuption
4
- end
5
- end
6
- end
@@ -1,38 +0,0 @@
1
- class Language
2
- class Parser
3
- class Interuption < StandardError
4
- def initialize(parser, atom = Atom.new)
5
- @parser = parser
6
- @atom = atom
7
- end
8
-
9
- def message
10
- "\n#{line}#{" " * column_index}^\n"
11
- end
12
-
13
- def line
14
- l = input.lines[line_index]
15
- l += "\n" if l[-1] != "\n"
16
- l
17
- end
18
-
19
- def line_index
20
- input[...cursor].count("\n")
21
- end
22
-
23
- def column_index
24
- cursor - input.lines[...line_index].map(&:size).sum
25
- end
26
-
27
- private
28
-
29
- def cursor
30
- @parser.cursor
31
- end
32
-
33
- def input
34
- @parser.input
35
- end
36
- end
37
- end
38
- end
@@ -1,6 +0,0 @@
1
- class Language
2
- class Parser
3
- class NotEndOfInput < Interuption
4
- end
5
- end
6
- end
@@ -1,16 +0,0 @@
1
- class Language
2
- class Parser
3
- class Str
4
- class NotFound < Interuption
5
- def initialize(parser, string)
6
- @parser = parser
7
- @string = string
8
- end
9
-
10
- def message
11
- "#{@string} not found\n#{super}"
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,6 +0,0 @@
1
- class Language
2
- class Parser
3
- class Str
4
- end
5
- end
6
- end
@@ -1,53 +0,0 @@
1
- class Language
2
- class Parser
3
- attr_accessor :input, :buffer, :output, :root, :cursor
4
-
5
- def initialize(root:, input:, cursor: 0, buffer: "", output: Output.new)
6
- @root = root
7
- @input = input
8
- @cursor = cursor
9
- @buffer = buffer
10
- @output = output
11
- end
12
-
13
- def parse(check_end_of_input: true)
14
- @root.parse(self)
15
-
16
- if @cursor == @input.size || !check_end_of_input
17
- @output.present? ? @output : Output.new(@buffer)
18
- else
19
- raise NotEndOfInput.new(self)
20
- end
21
- end
22
-
23
- def consume(n)
24
- if @cursor + n <= @input.size
25
- @buffer += @input[@cursor, n]
26
- @cursor += n
27
- else
28
- raise EndOfInput.new(self)
29
- end
30
- end
31
-
32
- def aka(name)
33
- if @buffer.empty?
34
- @output = Output.new({ name => @output })
35
- else
36
- @output[name] = Output.new(@buffer)
37
- @buffer = ""
38
- end
39
- end
40
-
41
- def next?(string)
42
- @input[@cursor...(@cursor + string.size)] == string
43
- end
44
-
45
- def buffer?
46
- @buffer != ""
47
- end
48
-
49
- def output?
50
- @output.present?
51
- end
52
- end
53
- end
data/lib/language-ruby.rb DELETED
@@ -1,10 +0,0 @@
1
- require "bigdecimal"
2
- require "stringio"
3
- require "timeout"
4
- require "zeitwerk"
5
-
6
- loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
7
- loader.ignore("#{__dir__}/template-ruby.rb")
8
- loader.ignore("#{__dir__}/code-ruby.rb")
9
- loader.ignore("#{__dir__}/language-ruby.rb")
10
- loader.setup
data/lib/language.rb DELETED
@@ -1,80 +0,0 @@
1
- class Language
2
- def self.parse(input)
3
- new.parse(input)
4
- end
5
-
6
- def self.absent
7
- Atom::Absent.new(parent: new)
8
- end
9
-
10
- def self.ignore
11
- Atom::Ignore.new(parent: new)
12
- end
13
-
14
- def self.maybe
15
- Atom::Maybe.new(parent: new)
16
- end
17
-
18
- def self.repeat(min = 0, max = nil)
19
- Atom::Repeat.new(parent: new, min: min, max: max)
20
- end
21
-
22
- def self.aka(name)
23
- Atom::Aka.new(parent: new, name: name)
24
- end
25
-
26
- def self.|(other)
27
- Atom::Or.new(left: new, right: other)
28
- end
29
-
30
- def self.>>(other)
31
- Atom::And.new(left: new, right: other)
32
- end
33
-
34
- def self.<<(other)
35
- Atom::And.new(left: new, right: other)
36
- end
37
-
38
- def self.then(&block)
39
- Atom::Then.new(parent: new, block: block)
40
- end
41
-
42
- def parse(input_or_parser)
43
- if input_or_parser.is_a?(Parser)
44
- parser = input_or_parser
45
- clone =
46
- Parser.new(
47
- root: root,
48
- input: parser.input,
49
- cursor: parser.cursor,
50
- buffer: parser.buffer,
51
- output: parser.output
52
- )
53
-
54
- clone.parse(check_end_of_input: false)
55
-
56
- parser.cursor = clone.cursor
57
- parser.buffer = clone.buffer
58
- parser.output = clone.output
59
- else
60
- input = input_or_parser
61
- Parser.new(root: root, input: input).parse
62
- end
63
- end
64
-
65
- def str(string)
66
- Atom::Str.new(string: string)
67
- end
68
-
69
- def any
70
- Atom::Any.new
71
- end
72
-
73
- def to_s
74
- "<#{self.class.name}>"
75
- end
76
-
77
- def inspect
78
- to_s
79
- end
80
- end