arpaka 0.1.1 → 2.0.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/CHANGELOG.md +46 -2
- data/README.md +118 -7
- data/Rakefile +15 -1
- data/docs/architecture.dot +30 -0
- data/docs/architecture.md +96 -0
- data/docs/architecture.webp +0 -0
- data/docs/contributes.md +115 -0
- data/docs/usage.md +497 -0
- data/lib/arpaka/cli.rb +5 -50
- data/lib/arpaka/plugins/cli.rb +61 -0
- data/lib/arpaka/plugins/sample.rb +14 -0
- data/lib/arpaka/plugins/sample_runner.rb +21 -0
- data/lib/arpaka/{actions.rb → ruby/actions.rb} +230 -151
- data/lib/arpaka/ruby/class_name_parser.rb +97 -0
- data/lib/arpaka/ruby/cli.rb +64 -0
- data/lib/arpaka/ruby/frontend_emitter.rb +59 -0
- data/lib/arpaka/ruby/generator.rb +41 -0
- data/lib/arpaka/{ruby_grammar.rb → ruby/grammar.rb} +53 -59
- data/lib/arpaka/ruby/grammar_emitter.rb +71 -0
- data/lib/arpaka/ruby/profile.rb +129 -0
- data/lib/arpaka/ruby/profiles/ruby_3_3.rb +800 -0
- data/lib/arpaka/ruby/profiles/ruby_3_4.rb +802 -0
- data/lib/arpaka/ruby/runtime/detailed/ast.rb.erb +92 -0
- data/lib/arpaka/ruby/runtime/detailed/builder.rb.erb +1177 -0
- data/lib/arpaka/{runtime → ruby/runtime}/frontend.rb.erb +17 -4
- data/lib/arpaka/{runtime → ruby/runtime}/lexer.rb.erb +583 -99
- data/lib/arpaka/ruby/runtime/structured.rb.erb +111 -0
- data/lib/arpaka/ruby.rb +23 -0
- data/lib/arpaka.rb +6 -9
- data/lib/lrama/ruby/backend.rb +4 -9
- data/lib/lrama/ruby/parser.rb.erb +35 -9
- data/lib/lrama/ruby/parser_emitter.rb +41 -0
- data/lib/lrama/ruby/table_codec.rb +50 -0
- data/lib/lrama/ruby/version.rb +1 -1
- data/lib/lrama/ruby.rb +1 -0
- data/sig/arpaka.rbs +8 -3
- metadata +46 -13
- data/lib/arpaka/generator.rb +0 -43
- data/lib/arpaka/runtime/ast.rb.erb +0 -35
- data/lib/arpaka/runtime/builder.rb.erb +0 -247
- /data/lib/arpaka/{BSDL → ruby/BSDL} +0 -0
- /data/lib/arpaka/{COPYING → ruby/COPYING} +0 -0
- /data/lib/arpaka/{source.json → ruby/source.json} +0 -0
- /data/lib/arpaka/{upstream_rules.json → ruby/upstream_rules.json} +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
module AST
|
|
2
|
+
Program = Data.define(:statements)
|
|
3
|
+
Literal = Data.define(:value)
|
|
4
|
+
EncodingLiteral = Data.define(:value)
|
|
5
|
+
<% if runtime.fetch("ast_nodes", []).include?("self") -%>
|
|
6
|
+
Self = Data.define
|
|
7
|
+
<% end -%>
|
|
8
|
+
Binary = Data.define(:operator, :left, :right)
|
|
9
|
+
Unary = Data.define(:operator, :operand)
|
|
10
|
+
If = Data.define(:condition, :then_body, :else_body)
|
|
11
|
+
LocalRead = Data.define(:name)
|
|
12
|
+
LocalWrite = Data.define(:name, :value)
|
|
13
|
+
<% if runtime.fetch("ast_nodes", []).include?("assignment") -%>
|
|
14
|
+
Assignment = Data.define(:target, :value)
|
|
15
|
+
OpAssign = Data.define(:target, :operator, :value)
|
|
16
|
+
MultipleAssign = Data.define(:targets, :rest, :post, :value) do
|
|
17
|
+
constructor = method(:new)
|
|
18
|
+
define_singleton_method(:new) do |targets, value = nil, rest: nil, post: nil|
|
|
19
|
+
constructor.call(Array(targets).freeze, rest, Array(post).freeze, value)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
Field = Data.define(:receiver, :operator, :name)
|
|
23
|
+
Alias = Data.define(:kind, :new_name, :old_name)
|
|
24
|
+
Undef = Data.define(:names)
|
|
25
|
+
<% end -%>
|
|
26
|
+
BareCall = Data.define(:name)
|
|
27
|
+
ArrayLiteral = Data.define(:elements)
|
|
28
|
+
Splat = Data.define(:value)
|
|
29
|
+
HashLiteral = Data.define(:pairs)
|
|
30
|
+
<% if runtime.fetch("ast_nodes", []).include?("keyword_arguments") -%>
|
|
31
|
+
KeywordArguments = Data.define(:pairs)
|
|
32
|
+
<% end -%>
|
|
33
|
+
Pair = Data.define(:key, :value)
|
|
34
|
+
RangeLiteral = Data.define(:operator, :begin_value, :end_value)
|
|
35
|
+
Ternary = Data.define(:condition, :then_value, :else_value)
|
|
36
|
+
Call = Data.define(:name, :arguments)
|
|
37
|
+
Super = Data.define(:arguments)
|
|
38
|
+
BlockPass = Data.define(:arguments, :value)
|
|
39
|
+
ReceiverCall = Data.define(:receiver, :operator, :name, :arguments)
|
|
40
|
+
BlockParameters = Data.define(:kind, :value)
|
|
41
|
+
Parameter = Data.define(:kind, :name, :value)
|
|
42
|
+
BlockCall = Data.define(:call, :parameters, :body, :style) do
|
|
43
|
+
constructor = method(:new)
|
|
44
|
+
define_singleton_method(:new) do |call, parameters, body, style = nil|
|
|
45
|
+
constructor.call(call, parameters, body, style)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def ==(other)
|
|
49
|
+
other.is_a?(self.class) &&
|
|
50
|
+
call == other.call && parameters == other.parameters && body == other.body
|
|
51
|
+
end
|
|
52
|
+
alias eql? ==
|
|
53
|
+
end
|
|
54
|
+
StringLiteral = Data.define(:value)
|
|
55
|
+
InterpolatedString = Data.define(:parts)
|
|
56
|
+
DynamicSymbol = Data.define(:parts)
|
|
57
|
+
Index = Data.define(:receiver, :arguments)
|
|
58
|
+
Loop = Data.define(:kind, :condition, :body)
|
|
59
|
+
Control = Data.define(:kind, :value)
|
|
60
|
+
Variable = Data.define(:kind, :name)
|
|
61
|
+
ConstantPath = Data.define(:receiver, :name)
|
|
62
|
+
AbsoluteConstant = Data.define(:name)
|
|
63
|
+
Rescue = Data.define(:expression, :fallback)
|
|
64
|
+
RegexpLiteral = Data.define(:value, :options, :encoding, :once) do
|
|
65
|
+
constructor = method(:new)
|
|
66
|
+
define_singleton_method(:new) do |value, options = 0, encoding = nil, once = false|
|
|
67
|
+
constructor.call(value, options, encoding, once)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
XStringLiteral = Data.define(:value)
|
|
71
|
+
For = Data.define(:variable, :enumerable, :body)
|
|
72
|
+
Def = Data.define(:name, :arguments, :body)
|
|
73
|
+
<% if runtime.fetch("ast_nodes", []).include?("singleton_method") -%>
|
|
74
|
+
SingletonMethodDef = Data.define(:receiver, :name, :arguments, :body)
|
|
75
|
+
<% end -%>
|
|
76
|
+
ClassDef = Data.define(:name, :superclass, :body)
|
|
77
|
+
ModuleDef = Data.define(:name, :body)
|
|
78
|
+
<% if runtime.fetch("ast_nodes", []).include?("singleton_class") -%>
|
|
79
|
+
SingletonClassDef = Data.define(:receiver, :body)
|
|
80
|
+
<% end -%>
|
|
81
|
+
When = Data.define(:patterns, :body)
|
|
82
|
+
Case = Data.define(:expression, :whens, :else_body)
|
|
83
|
+
<% if runtime.fetch("ast_nodes", []).include?("pattern") -%>
|
|
84
|
+
Pattern = Data.define(:kind, :values)
|
|
85
|
+
RescueClause = Data.define(:exceptions, :variable, :body)
|
|
86
|
+
FullRescue = Data.define(:body, :clauses, :else_body, :ensure_body)
|
|
87
|
+
BeginBlock = Data.define(:body)
|
|
88
|
+
EndBlock = Data.define(:body)
|
|
89
|
+
<% end -%>
|
|
90
|
+
Lambda = Data.define(:arguments, :body)
|
|
91
|
+
Sequence = Data.define(:statements)
|
|
92
|
+
end
|