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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -2
  3. data/README.md +118 -7
  4. data/Rakefile +15 -1
  5. data/docs/architecture.dot +30 -0
  6. data/docs/architecture.md +96 -0
  7. data/docs/architecture.webp +0 -0
  8. data/docs/contributes.md +115 -0
  9. data/docs/usage.md +497 -0
  10. data/lib/arpaka/cli.rb +5 -50
  11. data/lib/arpaka/plugins/cli.rb +61 -0
  12. data/lib/arpaka/plugins/sample.rb +14 -0
  13. data/lib/arpaka/plugins/sample_runner.rb +21 -0
  14. data/lib/arpaka/{actions.rb → ruby/actions.rb} +230 -151
  15. data/lib/arpaka/ruby/class_name_parser.rb +97 -0
  16. data/lib/arpaka/ruby/cli.rb +64 -0
  17. data/lib/arpaka/ruby/frontend_emitter.rb +59 -0
  18. data/lib/arpaka/ruby/generator.rb +41 -0
  19. data/lib/arpaka/{ruby_grammar.rb → ruby/grammar.rb} +53 -59
  20. data/lib/arpaka/ruby/grammar_emitter.rb +71 -0
  21. data/lib/arpaka/ruby/profile.rb +129 -0
  22. data/lib/arpaka/ruby/profiles/ruby_3_3.rb +800 -0
  23. data/lib/arpaka/ruby/profiles/ruby_3_4.rb +802 -0
  24. data/lib/arpaka/ruby/runtime/detailed/ast.rb.erb +92 -0
  25. data/lib/arpaka/ruby/runtime/detailed/builder.rb.erb +1177 -0
  26. data/lib/arpaka/{runtime → ruby/runtime}/frontend.rb.erb +17 -4
  27. data/lib/arpaka/{runtime → ruby/runtime}/lexer.rb.erb +583 -99
  28. data/lib/arpaka/ruby/runtime/structured.rb.erb +111 -0
  29. data/lib/arpaka/ruby.rb +23 -0
  30. data/lib/arpaka.rb +6 -9
  31. data/lib/lrama/ruby/backend.rb +4 -9
  32. data/lib/lrama/ruby/parser.rb.erb +35 -9
  33. data/lib/lrama/ruby/parser_emitter.rb +41 -0
  34. data/lib/lrama/ruby/table_codec.rb +50 -0
  35. data/lib/lrama/ruby/version.rb +1 -1
  36. data/lib/lrama/ruby.rb +1 -0
  37. data/sig/arpaka.rbs +8 -3
  38. metadata +46 -13
  39. data/lib/arpaka/generator.rb +0 -43
  40. data/lib/arpaka/runtime/ast.rb.erb +0 -35
  41. data/lib/arpaka/runtime/builder.rb.erb +0 -247
  42. /data/lib/arpaka/{BSDL → ruby/BSDL} +0 -0
  43. /data/lib/arpaka/{COPYING → ruby/COPYING} +0 -0
  44. /data/lib/arpaka/{source.json → ruby/source.json} +0 -0
  45. /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