myco 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/lib/myco/bootstrap/instance.rb +13 -3
  3. data/lib/myco/code_tools/AST.my +0 -2
  4. data/lib/myco/code_tools/AST.my.rb +0 -1
  5. data/lib/myco/code_tools/AST/Block.my +15 -4
  6. data/lib/myco/code_tools/AST/Block.my.rb +16 -3
  7. data/lib/myco/code_tools/AST/DeclareMeme.my +44 -64
  8. data/lib/myco/code_tools/AST/DeclareMeme.my.rb +66 -74
  9. data/lib/myco/code_tools/AST/ToRuby.my +17 -20
  10. data/lib/myco/code_tools/AST/ToRuby.my.rb +24 -22
  11. data/lib/myco/code_tools/Parser.my +2 -1
  12. data/lib/myco/code_tools/Parser.my.rb +2 -1
  13. data/lib/myco/code_tools/parser/MycoBuilder.my +2 -2
  14. data/lib/myco/code_tools/parser/MycoBuilder.my.rb +2 -2
  15. data/lib/myco/code_tools/parser/MycoGrammar.my +28 -21
  16. data/lib/myco/code_tools/parser/MycoGrammar.my.rb +94 -56
  17. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces.my +10 -11
  18. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces.my.rb +10 -9
  19. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my +25 -3
  20. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +38 -0
  21. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Capture.my +152 -0
  22. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Capture.my.rb +189 -0
  23. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common.my +84 -0
  24. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common.my.rb +114 -0
  25. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my +139 -0
  26. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/{BytecodeParser.my.rb → Common/Parser.my.rb} +17 -36
  27. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Composite.my +229 -0
  28. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Composite.my.rb +296 -0
  29. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my +8 -25
  30. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +9 -37
  31. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my +139 -37
  32. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my.rb +206 -36
  33. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my +21 -12
  34. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +45 -24
  35. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream.my +99 -0
  36. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream.my.rb +152 -0
  37. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream/Parser.my +37 -0
  38. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream/Parser.my.rb +57 -0
  39. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String.my +136 -0
  40. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String.my.rb +147 -0
  41. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String/Parser.my +45 -0
  42. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String/Parser.my.rb +85 -0
  43. data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my +31 -25
  44. data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my.rb +44 -25
  45. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my +49 -0
  46. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my.rb +119 -0
  47. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my +131 -0
  48. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my.rb +595 -0
  49. data/lib/myco/code_tools/parser/pegleromyces/spec/{BytecodeParser.test.my → String/Parser.test.my} +41 -2
  50. data/lib/myco/code_tools/parser/pegleromyces/spec/{BytecodeParser.test.my.rb → String/Parser.test.my.rb} +144 -3
  51. data/lib/myco/code_tools/parser/pegleromyces/spec/run.my +4 -10
  52. data/lib/myco/code_tools/parser/pegleromyces/spec/run.my.rb +4 -8
  53. data/lib/myco/core.my +1 -0
  54. data/lib/myco/core.my.rb +1 -0
  55. data/lib/myco/core/BasicObject.my +4 -2
  56. data/lib/myco/core/BasicObject.my.rb +2 -5
  57. data/lib/myco/core/Loop.my +5 -0
  58. data/lib/myco/core/Loop.my.rb +13 -0
  59. data/lib/myco/dev.rb +1 -0
  60. data/lib/myco/dev/profile.rb +12 -0
  61. data/lib/myco/version.rb +3 -3
  62. metadata +54 -59
  63. data/lib/myco/code_tools/AST/DeclareDecorator.my +0 -19
  64. data/lib/myco/code_tools/AST/DeclareDecorator.my.rb +0 -24
  65. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Builder.my +0 -4
  66. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Builder.my.rb +0 -5
  67. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my +0 -420
  68. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my.rb +0 -415
  69. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my +0 -147
  70. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Constructions.my +0 -183
  71. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Constructions.my.rb +0 -370
  72. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Instructions.my +0 -139
  73. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Instructions.my.rb +0 -284
  74. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my +0 -37
  75. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my.rb +0 -24
  76. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Patterns.my +0 -123
  77. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Patterns.my.rb +0 -164
  78. data/lib/myco/code_tools/parser/pegleromyces/spec/Builder.test.my +0 -10
  79. data/lib/myco/code_tools/parser/pegleromyces/spec/Builder.test.my.rb +0 -9
  80. data/lib/myco/code_tools/parser/pegleromyces/spec/BytecodeInstructions.test.my +0 -10
  81. data/lib/myco/code_tools/parser/pegleromyces/spec/BytecodeInstructions.test.my.rb +0 -9
  82. data/lib/myco/code_tools/parser/pegleromyces/spec/Constructions.test.my +0 -229
  83. data/lib/myco/code_tools/parser/pegleromyces/spec/Constructions.test.my.rb +0 -663
  84. data/lib/myco/code_tools/parser/pegleromyces/spec/Instructions.test.my +0 -10
  85. data/lib/myco/code_tools/parser/pegleromyces/spec/Instructions.test.my.rb +0 -9
  86. data/lib/myco/code_tools/parser/pegleromyces/spec/Machine.test.my +0 -13
  87. data/lib/myco/code_tools/parser/pegleromyces/spec/Machine.test.my.rb +0 -20
  88. data/lib/myco/code_tools/parser/pegleromyces/spec/Parser.test.my +0 -54
  89. data/lib/myco/code_tools/parser/pegleromyces/spec/Parser.test.my.rb +0 -215
@@ -1,10 +0,0 @@
1
-
2
- BasicSpec {
3
- name: "Instructions"
4
-
5
- instructions: Instructions { }
6
-
7
- [tests]
8
-
9
- it "exists": assert(instructions)
10
- }
@@ -1,9 +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) { |*| ("Instructions")}
6
- declare_meme(:instructions, [], nil, ::Myco.cscope.dup) { |*| (::Myco::Component.new([::Myco.find_constant(:Instructions)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
7
- .tap { |__c__| __c__.__last__ = __c__.component_eval {nil}}.instance)}
8
- __category__(:tests).component_eval {(declare_meme(:exists, [[:it, []]], nil, ::Myco.cscope.dup) { |*| (self.assert(self.instructions))})}
9
- )}}.instance)}}.instance
@@ -1,13 +0,0 @@
1
-
2
- BasicSpec {
3
- name: "Machine"
4
-
5
- new_machine: Machine { }
6
-
7
- [tests]
8
-
9
- it "starts pointing to instruction 0": assert_equal(new_machine.ip, 0)
10
- it "starts pointing to string index 0": assert_equal(new_machine.idx, 0)
11
- it "starts with an empty stack": assert(new_machine.stack.empty?)
12
- it "starts with no captures": assert(new_machine.captures.empty?)
13
- }
@@ -1,20 +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) { |*| ("Machine")}
6
- declare_meme(:new_machine, [], nil, ::Myco.cscope.dup) { |*| (::Myco::Component.new([::Myco.find_constant(:Machine)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
7
- .tap { |__c__| __c__.__last__ = __c__.component_eval {nil}}.instance)}
8
- __category__(:tests).component_eval {(
9
- declare_meme(:"starts pointing to instruction 0", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (self.assert_equal(
10
- self.new_machine.ip,
11
- 0
12
- ))}
13
- declare_meme(:"starts pointing to string index 0", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (self.assert_equal(
14
- self.new_machine.idx,
15
- 0
16
- ))}
17
- declare_meme(:"starts with an empty stack", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (self.assert(self.new_machine.stack.__send__(:empty?)))}
18
- declare_meme(:"starts with no captures", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (self.assert(self.new_machine.captures.__send__(:empty?)))}
19
- )}
20
- )}}.instance)}}.instance
@@ -1,54 +0,0 @@
1
-
2
- BasicSpec {
3
- name: "Parser"
4
-
5
- new_parser: Parser { }
6
-
7
- basic_grammar: Grammar {
8
- c: character_classes
9
-
10
- [character_classes]
11
- upper: range('A','Z')
12
- lower: range('a','z') / str('_')
13
- num: range('0','9')
14
- alpha: upper / lower
15
- spc: set(" \t\r\f\v")
16
-
17
- [rules]
18
- rule root: expr[:root]
19
- rule expr: (array / assign / constant / ident / float / integer)
20
-
21
- rule sepd_expr: r(c.spc.* + str(',') + c.spc.* + integer[:n0]) { n0 }
22
- rule array: r(str('[') + expr[:n0] + sepd_expr.*[:nrest] + str(']'))
23
- { [n0, *nrest] }
24
-
25
- rule constant: r((c.upper + c.alpha.*)[:text]) { [:constant, text.to_sym] }
26
- rule ident: r((c.lower + c.alpha.*)[:text]) { [:ident, text.to_sym] }
27
- rule integer: r((str('-').- + c.num.+)[:text]) { [:integer, text.to_i] }
28
- rule float: r((str('-').- + c.num.+ + str('.') + c.num.+)[:text])
29
- { [:float, text.to_f] }
30
-
31
- rule assign_lhs: (constant / ident)
32
- rule assign_rhs: expr
33
- rule assign: r(assign_lhs[:lhs] + c.spc.* + str('=') + c.spc.* +
34
- assign_rhs[:rhs]) { [:assign, lhs, rhs] }
35
- }
36
-
37
- [tests]
38
-
39
- it "can parse from a basic grammar": {
40
- parser = new_parser
41
- parser.grammar = basic_grammar
42
-
43
- examples = [
44
- "xyz", [:ident, :xyz]
45
- "_foo = -88.8", [:assign, [:ident, :"_foo"], [:float, -88.8]]
46
- "Foo_BAR=5", [:assign, [:constant, :"Foo_BAR"], [:integer, 5]]
47
- "[99, 99]", [[:integer, 99], [:integer, 99]]
48
- ]
49
-
50
- examples.each_slice(2) |input, output| {
51
- assert_equal(parser.parse(input).result.fetch(:root), output)
52
- }
53
- }
54
- }
@@ -1,215 +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) { |*| ("Parser")}
6
- declare_meme(:new_parser, [], nil, ::Myco.cscope.dup) { |*| (::Myco::Component.new([::Myco.find_constant(:Parser)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
7
- .tap { |__c__| __c__.__last__ = __c__.component_eval {nil}}.instance)}
8
- declare_meme(:basic_grammar, [], nil, ::Myco.cscope.dup) { |*| (::Myco::Component.new([::Myco.find_constant(:Grammar)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
9
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(
10
- declare_meme(:c, [], nil, ::Myco.cscope.dup) { |*| (self.character_classes)}
11
- __category__(:character_classes).component_eval {(
12
- declare_meme(:upper, [], nil, ::Myco.cscope.dup) { |*| (self.range(
13
- "A",
14
- "Z"
15
- ))}
16
- declare_meme(:lower, [], nil, ::Myco.cscope.dup) { |*| (self.range(
17
- "a",
18
- "z"
19
- ).__send__(
20
- :/,
21
- self.str("_")
22
- ))}
23
- declare_meme(:num, [], nil, ::Myco.cscope.dup) { |*| (self.range(
24
- "0",
25
- "9"
26
- ))}
27
- declare_meme(:alpha, [], nil, ::Myco.cscope.dup) { |*| (self.upper.__send__(
28
- :/,
29
- self.lower
30
- ))}
31
- declare_meme(:spc, [], nil, ::Myco.cscope.dup) { |*| (self.set(" \t\r\f\v"))}
32
- )}
33
- __category__(:rules).component_eval {(
34
- declare_meme(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.expr.__send__(
35
- :[],
36
- :root
37
- ))}
38
- declare_meme(:expr, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.array.__send__(
39
- :/,
40
- self.assign
41
- ).__send__(
42
- :/,
43
- self.constant
44
- ).__send__(
45
- :/,
46
- self.ident
47
- ).__send__(
48
- :/,
49
- self.float
50
- ).__send__(
51
- :/,
52
- self.integer
53
- ))}
54
- declare_meme(:sepd_expr, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.c.spc.__send__(:*).__send__(
55
- :+,
56
- self.str(",")
57
- ).__send__(
58
- :+,
59
- self.c.spc.__send__(:*)
60
- ).__send__(
61
- :+,
62
- self.integer.__send__(
63
- :[],
64
- :n0
65
- )
66
- )) { || (self.__send__(:n0))})}
67
- declare_meme(:array, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.str("[").__send__(
68
- :+,
69
- self.expr.__send__(
70
- :[],
71
- :n0
72
- )
73
- ).__send__(
74
- :+,
75
- self.sepd_expr.__send__(:*).__send__(
76
- :[],
77
- :nrest
78
- )
79
- ).__send__(
80
- :+,
81
- self.str("]")
82
- )) { || ([
83
- self.__send__(:n0),
84
- *self.nrest
85
- ])})}
86
- declare_meme(:constant, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.c.upper.__send__(
87
- :+,
88
- self.c.alpha.__send__(:*)
89
- ).__send__(
90
- :[],
91
- :text
92
- )) { || ([
93
- :constant,
94
- self.text.to_sym
95
- ])})}
96
- declare_meme(:ident, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.c.lower.__send__(
97
- :+,
98
- self.c.alpha.__send__(:*)
99
- ).__send__(
100
- :[],
101
- :text
102
- )) { || ([
103
- :ident,
104
- self.text.to_sym
105
- ])})}
106
- declare_meme(:integer, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.str("-").__send__(:-).__send__(
107
- :+,
108
- self.c.num.__send__(:+)
109
- ).__send__(
110
- :[],
111
- :text
112
- )) { || ([
113
- :integer,
114
- self.text.to_i
115
- ])})}
116
- declare_meme(:float, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.str("-").__send__(:-).__send__(
117
- :+,
118
- self.c.num.__send__(:+)
119
- ).__send__(
120
- :+,
121
- self.str(".")
122
- ).__send__(
123
- :+,
124
- self.c.num.__send__(:+)
125
- ).__send__(
126
- :[],
127
- :text
128
- )) { || ([
129
- :float,
130
- self.text.to_f
131
- ])})}
132
- declare_meme(:assign_lhs, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.constant.__send__(
133
- :/,
134
- self.ident
135
- ))}
136
- declare_meme(:assign_rhs, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.expr)}
137
- declare_meme(:assign, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (self.r(self.assign_lhs.__send__(
138
- :[],
139
- :lhs
140
- ).__send__(
141
- :+,
142
- self.c.spc.__send__(:*)
143
- ).__send__(
144
- :+,
145
- self.str("=")
146
- ).__send__(
147
- :+,
148
- self.c.spc.__send__(:*)
149
- ).__send__(
150
- :+,
151
- self.assign_rhs.__send__(
152
- :[],
153
- :rhs
154
- )
155
- )) { || ([
156
- :assign,
157
- self.lhs,
158
- self.rhs
159
- ])})}
160
- )}
161
- )}}.instance)}
162
- __category__(:tests).component_eval {(declare_meme(:"can parse from a basic grammar", [[:it, []]], nil, ::Myco.cscope.dup) { |*| (
163
- parser = self.new_parser
164
- parser.__send__(
165
- :grammar=,
166
- self.basic_grammar
167
- )
168
- examples = [
169
- "xyz",
170
- [
171
- :ident,
172
- :xyz
173
- ],
174
- "_foo = -88.8",
175
- [
176
- :assign,
177
- [
178
- :ident,
179
- :_foo
180
- ],
181
- [
182
- :float,
183
- -88.8
184
- ]
185
- ],
186
- "Foo_BAR=5",
187
- [
188
- :assign,
189
- [
190
- :constant,
191
- :Foo_BAR
192
- ],
193
- [
194
- :integer,
195
- 5
196
- ]
197
- ],
198
- "[99, 99]",
199
- [
200
- [
201
- :integer,
202
- 99
203
- ],
204
- [
205
- :integer,
206
- 99
207
- ]
208
- ]
209
- ]
210
- examples.each_slice(2) { |input, output| (self.assert_equal(
211
- parser.parse(input).result.fetch(:root),
212
- output
213
- ))}
214
- )})}
215
- )}}.instance)}}.instance