myco 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/myco/bootstrap.my.rb +50 -14
  3. data/lib/myco/bootstrap/add_method.rb +5 -5
  4. data/lib/myco/bootstrap/meme.rb +2 -1
  5. data/lib/myco/code_tools/AST.my.rb +211 -43
  6. data/lib/myco/code_tools/AST/ArgumentAssembly.my.rb +92 -48
  7. data/lib/myco/code_tools/AST/ArrayAssembly.my.rb +39 -27
  8. data/lib/myco/code_tools/AST/Block.my.rb +176 -112
  9. data/lib/myco/code_tools/AST/BlockArgument.my.rb +29 -17
  10. data/lib/myco/code_tools/AST/BlockLiteral.my.rb +37 -17
  11. data/lib/myco/code_tools/AST/BlockParameter.my.rb +25 -9
  12. data/lib/myco/code_tools/AST/BranchOperator.my.rb +95 -75
  13. data/lib/myco/code_tools/AST/ConstantAccess.my.rb +52 -32
  14. data/lib/myco/code_tools/AST/ConstantAssignment.my.rb +52 -36
  15. data/lib/myco/code_tools/AST/ConstantDefine.my.rb +50 -26
  16. data/lib/myco/code_tools/AST/DeclareCategory.my.rb +38 -18
  17. data/lib/myco/code_tools/AST/DeclareExtension.my.rb +29 -13
  18. data/lib/myco/code_tools/AST/DeclareFile.my.rb +51 -31
  19. data/lib/myco/code_tools/AST/DeclareMeme.my.rb +96 -68
  20. data/lib/myco/code_tools/AST/DeclareObject.my.rb +66 -42
  21. data/lib/myco/code_tools/AST/DeclareString.my.rb +39 -19
  22. data/lib/myco/code_tools/AST/DeclaredScope.my.rb +92 -64
  23. data/lib/myco/code_tools/AST/Invoke.my +8 -4
  24. data/lib/myco/code_tools/AST/Invoke.my.rb +74 -31
  25. data/lib/myco/code_tools/AST/InvokeMethod.my.rb +34 -14
  26. data/lib/myco/code_tools/AST/KeywordAssembly.my.rb +36 -24
  27. data/lib/myco/code_tools/AST/KeywordOptionalParameter.my.rb +28 -8
  28. data/lib/myco/code_tools/AST/KeywordRequiredParameter.my.rb +23 -7
  29. data/lib/myco/code_tools/AST/KeywordRestParameter.my.rb +23 -7
  30. data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my.rb +24 -12
  31. data/lib/myco/code_tools/AST/LocalVariableAssignment.my.rb +30 -10
  32. data/lib/myco/code_tools/AST/Node.my.rb +234 -102
  33. data/lib/myco/code_tools/AST/NumericLiteral.my.rb +18 -6
  34. data/lib/myco/code_tools/AST/OptionalParameter.my.rb +33 -13
  35. data/lib/myco/code_tools/AST/ParameterAssembly.my.rb +275 -211
  36. data/lib/myco/code_tools/AST/PipeOperator.my.rb +42 -18
  37. data/lib/myco/code_tools/AST/Quest.my.rb +65 -37
  38. data/lib/myco/code_tools/AST/RequiredParameter.my.rb +20 -4
  39. data/lib/myco/code_tools/AST/RestParameter.my.rb +20 -4
  40. data/lib/myco/code_tools/AST/Script.my.rb +51 -23
  41. data/lib/myco/code_tools/AST/Sequence.my.rb +22 -10
  42. data/lib/myco/code_tools/AST/SplatValue.my.rb +28 -16
  43. data/lib/myco/code_tools/AST/StringCompose.my.rb +23 -11
  44. data/lib/myco/code_tools/AST/StringLiteral.my.rb +19 -7
  45. data/lib/myco/code_tools/AST/SymbolCompose.my.rb +27 -15
  46. data/lib/myco/code_tools/AST/SymbolLiteral.my.rb +18 -6
  47. data/lib/myco/code_tools/AST/ToRuby.my.rb +581 -341
  48. data/lib/myco/code_tools/AST/misc.my.rb +87 -35
  49. data/lib/myco/code_tools/Parser.my.rb +39 -12
  50. data/lib/myco/code_tools/parser/MycoBuilder.my.rb +106 -90
  51. data/lib/myco/code_tools/parser/MycoCharacterClasses.my.rb +98 -50
  52. data/lib/myco/code_tools/parser/MycoGrammar.my +1 -6
  53. data/lib/myco/code_tools/parser/MycoGrammar.my.rb +2124 -1710
  54. data/lib/myco/code_tools/parser/MycoTokens.my +0 -5
  55. data/lib/myco/code_tools/parser/MycoTokens.my.rb +387 -156
  56. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces.my.rb +55 -11
  57. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +321 -205
  58. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Capture.my.rb +223 -127
  59. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common.my.rb +188 -72
  60. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my +48 -0
  61. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my.rb +365 -189
  62. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Composite.my.rb +313 -233
  63. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +99 -55
  64. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +493 -325
  65. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream.my.rb +138 -114
  66. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream/Parser.my.rb +56 -44
  67. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String.my.rb +173 -93
  68. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String/Parser.my.rb +90 -70
  69. data/lib/myco/command.my.rb +85 -25
  70. data/lib/myco/command/inoculate.my.rb +219 -127
  71. data/lib/myco/core.my.rb +20 -4
  72. data/lib/myco/core/BasicDecorators.my.rb +211 -119
  73. data/lib/myco/core/BasicObject.my.rb +108 -44
  74. data/lib/myco/core/Category.my.rb +37 -13
  75. data/lib/myco/core/Decorator.my.rb +35 -27
  76. data/lib/myco/core/FileToplevel.my.rb +55 -27
  77. data/lib/myco/core/Loop.my.rb +16 -8
  78. data/lib/myco/core/Object.my.rb +34 -14
  79. data/lib/myco/core/Ruby.my.rb +13 -5
  80. data/lib/myco/core/Switch.my.rb +79 -47
  81. data/lib/myco/tools/BasicCommand.my.rb +79 -47
  82. data/lib/myco/tools/mycompile.my.rb +153 -69
  83. data/lib/myco/version.rb +1 -1
  84. metadata +34 -52
  85. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my +0 -144
  86. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my.rb +0 -221
  87. data/lib/myco/code_tools/parser/pegleromyces/spec/BasicSpec.my +0 -35
  88. data/lib/myco/code_tools/parser/pegleromyces/spec/BasicSpec.my.rb +0 -35
  89. data/lib/myco/code_tools/parser/pegleromyces/spec/Grammar.test.my +0 -10
  90. data/lib/myco/code_tools/parser/pegleromyces/spec/Grammar.test.my.rb +0 -9
  91. data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my +0 -162
  92. data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my.rb +0 -353
  93. data/lib/myco/code_tools/parser/pegleromyces/spec/Processor.test.my +0 -10
  94. data/lib/myco/code_tools/parser/pegleromyces/spec/Processor.test.my.rb +0 -9
  95. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my +0 -49
  96. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my.rb +0 -119
  97. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my +0 -131
  98. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my.rb +0 -595
  99. data/lib/myco/code_tools/parser/pegleromyces/spec/String/Parser.test.my +0 -120
  100. data/lib/myco/code_tools/parser/pegleromyces/spec/String/Parser.test.my.rb +0 -350
  101. data/lib/myco/code_tools/parser/pegleromyces/spec/run.my +0 -14
  102. data/lib/myco/code_tools/parser/pegleromyces/spec/run.my.rb +0 -12
@@ -1,120 +0,0 @@
1
-
2
- BasicSpec {
3
- name: "String::Parser"
4
-
5
- new_parser: String::Parser.new
6
-
7
- [tests]
8
-
9
- it "can match from a tiny grammar": {
10
- parser = new_parser
11
- parser.grammar = Grammar {
12
- [rules]
13
- rule root:
14
- str('abc') / str('x') + set('Yy') + !str('y') + !!range('a','z') + any
15
- }
16
- state = parser.parse('xyz')
17
- assert_equal(state.end_idx, 3)
18
- }
19
-
20
- it "can match from a grammar with multiplicit patterns": {
21
- parser = new_parser
22
- parser.grammar = Grammar {
23
- [rules]
24
- rule root: str('x').+ + str('y').* + str('z').-
25
- }
26
- state = parser.parse('xxz')
27
- assert_equal(state.end_idx, 3)
28
- }
29
-
30
- it "can match from a grammar with rule calls": {
31
- parser = new_parser
32
- parser.grammar = Grammar {
33
- [rules]
34
- rule root: unintended / intended
35
- rule unintended: abc
36
- rule intended: x + any_y + not_y + any_lower
37
-
38
- rule abc: str('abc')
39
- rule x: str('x')
40
- rule any_y: set('Yy')
41
- rule not_y: !str('y')
42
- rule lower: range('a','z')
43
- rule any_lower: !!lower + any
44
- }
45
- state = parser.parse('xyz')
46
- assert_equal(state.end_idx, 3)
47
- }
48
-
49
- it "exposes captures in the reduction environment": {
50
- parser = new_parser
51
- parser.grammar = Grammar {
52
- [rules]
53
- rule root: abc[:root]
54
-
55
- rule a: str('a')[:a]
56
- rule b: str('b')[:b]
57
- rule c: str('c')[:c]
58
-
59
- rule abc: r(a+b+c) {[
60
- captures.keys
61
- [captures[:a],captures[:b],captures[:c]]
62
- [a,b,c]
63
- ]}
64
- }
65
- state = parser.parse('abc')
66
- assert(state.end_idx)
67
- assert_equal(state.result[:root][0], [:a,:b,:c])
68
- assert_equal(state.result[:root][1], ["a","b","c"])
69
- assert_equal(state.result[:root][2], ["a","b","c"])
70
- }
71
-
72
- it "skips memoized rule calls without result corruption": {
73
- parser = new_parser
74
- parser.grammar = Grammar {
75
- [rules]
76
- rule root: moot
77
- rule moot:
78
- (array[:root] + str('NO')) / (array[:root] + str('NOPE')) / array[:root]
79
- rule array:
80
- r(str('[').token(:foo)[:t0] + (!str(']') + any).*[:list] + str(']'))
81
- { [:array, t0.line, *list.map(&:to_sym)] }
82
- }
83
- state = parser.parse('[abc]')
84
- assert(state.end_idx)
85
- assert_equal(state.result[:root], [:array, 1, :a, :b, :c])
86
- }
87
-
88
- it "can save a parser to a file to load and run it later": {
89
- parser = new_parser
90
- parser.grammar = Grammar {
91
- [rules]
92
- rule root: (r(character.+[:clist]) { clist })[:root]
93
- rule character: r(any[:text]) { text.to_sym }
94
- }
95
- state = parser.parse('xyz')
96
- assert_equal(state.result.fetch(:root), [:x, :y, :z])
97
- parser.save_prototype("/tmp/pegleromyces_output.my.rbc")
98
-
99
- parser = new_parser
100
- parser.load_prototype("/tmp/pegleromyces_output.my.rbc")
101
- state = parser.parse('xyz')
102
- assert_equal(state.result.fetch(:root), [:x, :y, :z])
103
- }
104
-
105
- it "can tokenize matches using a custom tokenizer function": {
106
- parser = new_parser
107
- parser.grammar = Grammar {
108
- tokenizer: &|type, source, start, stop| {
109
- token = [type, source.slice(start, stop - start)]
110
- }
111
- character: any.token(:char)
112
- [rules]
113
- rule root: (r(character.+[:clist]) { clist })[:root]
114
- }
115
- state = parser.parse('xyz')
116
- assert_equal(state.result.fetch(:root), [
117
- [:char, "x"], [:char, "y"], [:char, "z"]
118
- ])
119
- }
120
- }
@@ -1,350 +0,0 @@
1
-
2
- ::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
3
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco::Component.new([::Myco.find_constant(:BasicSpec)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
4
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(
5
- declare_meme(:name, [], nil, ::Myco.cscope.dup) { |*| ("String::Parser")}
6
- declare_meme(:new_parser, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:String)::Parser.new)}
7
- __category__(:tests).component_eval {(
8
- declare_meme(:"can match from a tiny grammar", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
9
- parser = self.new_parser
10
- parser.__send__(
11
- :grammar=,
12
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
13
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(__category__(:rules).component_eval {(declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("abc").__send__(
14
- :/,
15
- self.str("x")
16
- ).__send__(
17
- :+,
18
- self.set("Yy")
19
- ).__send__(
20
- :+,
21
- self.str("y").__send__(:!)
22
- ).__send__(
23
- :+,
24
- self.range(
25
- "a",
26
- "z"
27
- ).__send__(:!).__send__(:!)
28
- ).__send__(
29
- :+,
30
- self.any
31
- ))})})}}.instance
32
- )
33
- state = parser.parse("xyz")
34
- self.assert_equal(
35
- state.end_idx,
36
- 3
37
- )
38
- )}
39
- declare_meme(:"can match from a grammar with multiplicit patterns", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
40
- parser = self.new_parser
41
- parser.__send__(
42
- :grammar=,
43
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
44
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(__category__(:rules).component_eval {(declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("x").__send__(:+).__send__(
45
- :+,
46
- self.str("y").__send__(:*)
47
- ).__send__(
48
- :+,
49
- self.str("z").__send__(:-)
50
- ))})})}}.instance
51
- )
52
- state = parser.parse("xxz")
53
- self.assert_equal(
54
- state.end_idx,
55
- 3
56
- )
57
- )}
58
- declare_meme(:"can match from a grammar with rule calls", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
59
- parser = self.new_parser
60
- parser.__send__(
61
- :grammar=,
62
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
63
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(__category__(:rules).component_eval {(
64
- declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.unintended.__send__(
65
- :/,
66
- self.intended
67
- ))}
68
- declare_meme(:unintended, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.abc)}
69
- declare_meme(:intended, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.x.__send__(
70
- :+,
71
- self.any_y
72
- ).__send__(
73
- :+,
74
- self.not_y
75
- ).__send__(
76
- :+,
77
- self.any_lower
78
- ))}
79
- declare_meme(:abc, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("abc"))}
80
- declare_meme(:x, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("x"))}
81
- declare_meme(:any_y, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.set("Yy"))}
82
- declare_meme(:not_y, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("y").__send__(:!))}
83
- declare_meme(:lower, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.range(
84
- "a",
85
- "z"
86
- ))}
87
- declare_meme(:any_lower, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.lower.__send__(:!).__send__(:!).__send__(
88
- :+,
89
- self.any
90
- ))}
91
- )})}}.instance
92
- )
93
- state = parser.parse("xyz")
94
- self.assert_equal(
95
- state.end_idx,
96
- 3
97
- )
98
- )}
99
- declare_meme(:"exposes captures in the reduction environment", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
100
- parser = self.new_parser
101
- parser.__send__(
102
- :grammar=,
103
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
104
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(__category__(:rules).component_eval {(
105
- declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.abc.__send__(
106
- :[],
107
- :root
108
- ))}
109
- declare_meme(:a, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("a").__send__(
110
- :[],
111
- :a
112
- ))}
113
- declare_meme(:b, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("b").__send__(
114
- :[],
115
- :b
116
- ))}
117
- declare_meme(:c, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.str("c").__send__(
118
- :[],
119
- :c
120
- ))}
121
- declare_meme(:abc, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.a.__send__(
122
- :+,
123
- self.b
124
- ).__send__(
125
- :+,
126
- self.c
127
- )) { || ([
128
- self.captures.keys,
129
- [
130
- self.captures.__send__(
131
- :[],
132
- :a
133
- ),
134
- self.captures.__send__(
135
- :[],
136
- :b
137
- ),
138
- self.captures.__send__(
139
- :[],
140
- :c
141
- )
142
- ],
143
- [
144
- self.a,
145
- self.b,
146
- self.c
147
- ]
148
- ])})}
149
- )})}}.instance
150
- )
151
- state = parser.parse("abc")
152
- self.assert(state.end_idx)
153
- self.assert_equal(
154
- state.result.__send__(
155
- :[],
156
- :root
157
- ).__send__(
158
- :[],
159
- 0
160
- ),
161
- [
162
- :a,
163
- :b,
164
- :c
165
- ]
166
- )
167
- self.assert_equal(
168
- state.result.__send__(
169
- :[],
170
- :root
171
- ).__send__(
172
- :[],
173
- 1
174
- ),
175
- [
176
- "a",
177
- "b",
178
- "c"
179
- ]
180
- )
181
- self.assert_equal(
182
- state.result.__send__(
183
- :[],
184
- :root
185
- ).__send__(
186
- :[],
187
- 2
188
- ),
189
- [
190
- "a",
191
- "b",
192
- "c"
193
- ]
194
- )
195
- )}
196
- declare_meme(:"skips memoized rule calls without result corruption", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
197
- parser = self.new_parser
198
- parser.__send__(
199
- :grammar=,
200
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
201
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(__category__(:rules).component_eval {(
202
- declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.moot)}
203
- declare_meme(:moot, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.array.__send__(
204
- :[],
205
- :root
206
- ).__send__(
207
- :+,
208
- self.str("NO")
209
- ).__send__(
210
- :/,
211
- self.array.__send__(
212
- :[],
213
- :root
214
- ).__send__(
215
- :+,
216
- self.str("NOPE")
217
- )
218
- ).__send__(
219
- :/,
220
- self.array.__send__(
221
- :[],
222
- :root
223
- )
224
- ))}
225
- declare_meme(:array, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.str("[").token(:foo).__send__(
226
- :[],
227
- :t0
228
- ).__send__(
229
- :+,
230
- self.str("]").__send__(:!).__send__(
231
- :+,
232
- self.any
233
- ).__send__(:*).__send__(
234
- :[],
235
- :list
236
- )
237
- ).__send__(
238
- :+,
239
- self.str("]")
240
- )) { || ([
241
- :array,
242
- self.__send__(:t0).line,
243
- *self.list.map(&:to_sym)
244
- ])})}
245
- )})}}.instance
246
- )
247
- state = parser.parse("[abc]")
248
- self.assert(state.end_idx)
249
- self.assert_equal(
250
- state.result.__send__(
251
- :[],
252
- :root
253
- ),
254
- [
255
- :array,
256
- 1,
257
- :a,
258
- :b,
259
- :c
260
- ]
261
- )
262
- )}
263
- declare_meme(:"can save a parser to a file to load and run it later", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
264
- parser = self.new_parser
265
- parser.__send__(
266
- :grammar=,
267
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
268
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(__category__(:rules).component_eval {(
269
- declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.character.__send__(:+).__send__(
270
- :[],
271
- :clist
272
- )) { || (self.clist)}.__send__(
273
- :[],
274
- :root
275
- ))}
276
- declare_meme(:character, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.any.__send__(
277
- :[],
278
- :text
279
- )) { || (self.text.to_sym)})}
280
- )})}}.instance
281
- )
282
- state = parser.parse("xyz")
283
- self.assert_equal(
284
- state.result.fetch(:root),
285
- [
286
- :x,
287
- :y,
288
- :z
289
- ]
290
- )
291
- parser.save_prototype("/tmp/pegleromyces_output.my.rbc")
292
- parser = self.new_parser
293
- parser.load_prototype("/tmp/pegleromyces_output.my.rbc")
294
- state = parser.parse("xyz")
295
- self.assert_equal(
296
- state.result.fetch(:root),
297
- [
298
- :x,
299
- :y,
300
- :z
301
- ]
302
- )
303
- )}
304
- declare_meme(:"can tokenize matches using a custom tokenizer function", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
305
- parser = self.new_parser
306
- parser.__send__(
307
- :grammar=,
308
- ::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
309
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(
310
- declare_meme(:tokenizer, [], nil, ::Myco.cscope.dup) { |*| (::Object::Proc.new { |type, source, start, stop| (token = [
311
- type,
312
- source.slice(
313
- start,
314
- stop.__send__(
315
- :-,
316
- start
317
- )
318
- )
319
- ])})}
320
- declare_meme(:character, [], nil, ::Myco.cscope.dup) { |*| (self.any.token(:char))}
321
- __category__(:rules).component_eval {(declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.character.__send__(:+).__send__(
322
- :[],
323
- :clist
324
- )) { || (self.clist)}.__send__(
325
- :[],
326
- :root
327
- ))})}
328
- )}}.instance
329
- )
330
- state = parser.parse("xyz")
331
- self.assert_equal(
332
- state.result.fetch(:root),
333
- [
334
- [
335
- :char,
336
- "x"
337
- ],
338
- [
339
- :char,
340
- "y"
341
- ],
342
- [
343
- :char,
344
- "z"
345
- ]
346
- ]
347
- )
348
- )}
349
- )}
350
- )}}.instance)}}.instance