From cba0380a0f8eb409b150985fa29dc26efb151d9e Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:21:40 +0900 Subject: [PATCH 01/10] Use rbs-inline style for Lrama::Grammar::Binding --- lib/lrama/grammar/binding.rb | 9 ++++++++- sig/{ => generated}/lrama/grammar/binding.rbs | 15 +++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) rename sig/{ => generated}/lrama/grammar/binding.rbs (58%) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 5e528284..6dcba292 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -1,10 +1,13 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama class Grammar class Binding - attr_reader :actual_args, :count + attr_reader :actual_args #: Array[Lexer::Token] + attr_reader :count #: Integer + # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void def initialize(parameterizing_rule, actual_args) @parameters = parameterizing_rule.parameters @actual_args = actual_args @@ -13,6 +16,7 @@ def initialize(parameterizing_rule, actual_args) end.to_h end + # @rbs (Lexer::Token symbol) -> Lexer::Token def resolve_symbol(symbol) if symbol.is_a?(Lexer::Token::InstantiateRule) resolved_args = symbol.args.map { |arg| resolve_symbol(arg) } @@ -22,12 +26,14 @@ def resolve_symbol(symbol) end end + # @rbs (Lexer::Token::InstantiateRule token) -> String def concatenated_args_str(token) "#{token.rule_name}_#{token_to_args_s_values(token).join('_')}" end private + # @rbs (Lexer::Token symbol) -> Lexer::Token? def parameter_to_arg(symbol) if (arg = @parameter_to_arg[symbol.s_value].dup) arg.alias_name = symbol.alias_name @@ -35,6 +41,7 @@ def parameter_to_arg(symbol) arg end + # @rbs (Lexer::Token::InstantiateRule token) -> Array[String] def token_to_args_s_values(token) token.args.flat_map do |arg| resolved = resolve_symbol(arg) diff --git a/sig/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs similarity index 58% rename from sig/lrama/grammar/binding.rbs rename to sig/generated/lrama/grammar/binding.rbs index e8796455..3e1d346b 100644 --- a/sig/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -1,20 +1,27 @@ +# Generated from lib/lrama/grammar/binding.rb with RBS::Inline + module Lrama class Grammar class Binding attr_reader actual_args: Array[Lexer::Token] - attr_reader count: Integer - @required_parameters_count: Integer - @parameters: Array[Lexer::Token] - @parameter_to_arg: untyped + attr_reader count: Integer + # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void def initialize: (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void + + # @rbs (Lexer::Token symbol) -> Lexer::Token def resolve_symbol: (Lexer::Token symbol) -> Lexer::Token + + # @rbs (Lexer::Token::InstantiateRule token) -> String def concatenated_args_str: (Lexer::Token::InstantiateRule token) -> String private + # @rbs (Lexer::Token symbol) -> Lexer::Token? def parameter_to_arg: (Lexer::Token symbol) -> Lexer::Token? + + # @rbs (Lexer::Token::InstantiateRule token) -> Array[String] def token_to_args_s_values: (Lexer::Token::InstantiateRule token) -> Array[String] end end From a482e910d4ff49d6a772408d0d0ee8a51aa8d66e Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:24:32 +0900 Subject: [PATCH 02/10] Extract `resolved_args` --- lib/lrama/grammar/binding.rb | 18 ++++++++++++------ sig/generated/lrama/grammar/binding.rbs | 7 +++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 6dcba292..7def71f4 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -16,13 +16,14 @@ def initialize(parameterizing_rule, actual_args) end.to_h end - # @rbs (Lexer::Token symbol) -> Lexer::Token - def resolve_symbol(symbol) - if symbol.is_a?(Lexer::Token::InstantiateRule) - resolved_args = symbol.args.map { |arg| resolve_symbol(arg) } - Lrama::Lexer::Token::InstantiateRule.new(s_value: symbol.s_value, location: symbol.location, args: resolved_args, lhs_tag: symbol.lhs_tag) + # @rbs (Lexer::Token sym) -> Lexer::Token + def resolve_symbol(sym) + if sym.is_a?(Lexer::Token::InstantiateRule) + Lrama::Lexer::Token::InstantiateRule.new( + s_value: sym.s_value, location: sym.location, args: resolved_args(sym), lhs_tag: sym.lhs_tag + ) else - parameter_to_arg(symbol) || symbol + parameter_to_arg(sym) || sym end end @@ -33,6 +34,11 @@ def concatenated_args_str(token) private + # @rbs (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] + def resolved_args(sym) + sym.args.map { |arg| resolve_symbol(arg) } + end + # @rbs (Lexer::Token symbol) -> Lexer::Token? def parameter_to_arg(symbol) if (arg = @parameter_to_arg[symbol.s_value].dup) diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index 3e1d346b..157b07c8 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -10,14 +10,17 @@ module Lrama # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void def initialize: (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void - # @rbs (Lexer::Token symbol) -> Lexer::Token - def resolve_symbol: (Lexer::Token symbol) -> Lexer::Token + # @rbs (Lexer::Token sym) -> Lexer::Token + def resolve_symbol: (Lexer::Token sym) -> Lexer::Token # @rbs (Lexer::Token::InstantiateRule token) -> String def concatenated_args_str: (Lexer::Token::InstantiateRule token) -> String private + # @rbs (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] + def resolved_args: (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] + # @rbs (Lexer::Token symbol) -> Lexer::Token? def parameter_to_arg: (Lexer::Token symbol) -> Lexer::Token? From b8c6287675d919f51a90b9f657c59ee914381af4 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:25:41 +0900 Subject: [PATCH 03/10] Remove unused `actual_args` attribute from Lrama::Grammar::Binding --- lib/lrama/grammar/binding.rb | 1 - sig/generated/lrama/grammar/binding.rbs | 2 -- 2 files changed, 3 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 7def71f4..c34a4ec9 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -4,7 +4,6 @@ module Lrama class Grammar class Binding - attr_reader :actual_args #: Array[Lexer::Token] attr_reader :count #: Integer # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index 157b07c8..fd6b7166 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -3,8 +3,6 @@ module Lrama class Grammar class Binding - attr_reader actual_args: Array[Lexer::Token] - attr_reader count: Integer # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void From 376f3b8ae7ce8aea0a8ba74d1a91a194c3d19935 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:36:20 +0900 Subject: [PATCH 04/10] Remove unused `count` attribute from Lrama::Grammar::Binding --- lib/lrama/grammar/binding.rb | 2 -- sig/generated/lrama/grammar/binding.rbs | 2 -- 2 files changed, 4 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index c34a4ec9..1cf7dedb 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -4,8 +4,6 @@ module Lrama class Grammar class Binding - attr_reader :count #: Integer - # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void def initialize(parameterizing_rule, actual_args) @parameters = parameterizing_rule.parameters diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index fd6b7166..849fb670 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -3,8 +3,6 @@ module Lrama class Grammar class Binding - attr_reader count: Integer - # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void def initialize: (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void From 24f2229c0559697bb998a9b6d40266831f5a82f9 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:40:47 +0900 Subject: [PATCH 05/10] Extract map_params_to_args --- lib/lrama/grammar/binding.rb | 11 ++++++++--- sig/generated/lrama/grammar/binding.rbs | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 1cf7dedb..80cd7b0e 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -8,9 +8,7 @@ class Binding def initialize(parameterizing_rule, actual_args) @parameters = parameterizing_rule.parameters @actual_args = actual_args - @parameter_to_arg = @parameters.zip(actual_args).map do |param, arg| - [param.s_value, arg] - end.to_h + @parameter_to_arg = map_params_to_args(@parameters, @actual_args) end # @rbs (Lexer::Token sym) -> Lexer::Token @@ -31,6 +29,13 @@ def concatenated_args_str(token) private + # @rbs (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> Hash[String, Lexer::Token] + def map_params_to_args(params, actual_args) + params.zip(actual_args).map do |param, arg| + [param.s_value, arg] + end.to_h + end + # @rbs (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] def resolved_args(sym) sym.args.map { |arg| resolve_symbol(arg) } diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index 849fb670..bfd2e6cc 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -14,6 +14,9 @@ module Lrama private + # @rbs (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> Hash[String, Lexer::Token] + def map_params_to_args: (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> Hash[String, Lexer::Token] + # @rbs (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] def resolved_args: (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] From f298e9123575610327d24a33ef24ddebaca40b9e Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:45:29 +0900 Subject: [PATCH 06/10] Use sym instead of symbol --- lib/lrama/grammar/binding.rb | 8 ++++---- sig/generated/lrama/grammar/binding.rbs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 80cd7b0e..812569aa 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -41,10 +41,10 @@ def resolved_args(sym) sym.args.map { |arg| resolve_symbol(arg) } end - # @rbs (Lexer::Token symbol) -> Lexer::Token? - def parameter_to_arg(symbol) - if (arg = @parameter_to_arg[symbol.s_value].dup) - arg.alias_name = symbol.alias_name + # @rbs (Lexer::Token sym) -> Lexer::Token? + def parameter_to_arg(sym) + if (arg = @parameter_to_arg[sym.s_value].dup) + arg.alias_name = sym.alias_name end arg end diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index bfd2e6cc..e2648ba4 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -20,8 +20,8 @@ module Lrama # @rbs (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] def resolved_args: (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] - # @rbs (Lexer::Token symbol) -> Lexer::Token? - def parameter_to_arg: (Lexer::Token symbol) -> Lexer::Token? + # @rbs (Lexer::Token sym) -> Lexer::Token? + def parameter_to_arg: (Lexer::Token sym) -> Lexer::Token? # @rbs (Lexer::Token::InstantiateRule token) -> Array[String] def token_to_args_s_values: (Lexer::Token::InstantiateRule token) -> Array[String] From 521fa5ec83b0ce9c92d654ce91eb5bd482dbc1e1 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:46:21 +0900 Subject: [PATCH 07/10] Remove unused `@parameters` from Lrama::Grammar::Binding --- lib/lrama/grammar/binding.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 812569aa..9f1166af 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -6,9 +6,8 @@ class Grammar class Binding # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void def initialize(parameterizing_rule, actual_args) - @parameters = parameterizing_rule.parameters @actual_args = actual_args - @parameter_to_arg = map_params_to_args(@parameters, @actual_args) + @parameter_to_arg = map_params_to_args(parameterizing_rule.parameters, @actual_args) end # @rbs (Lexer::Token sym) -> Lexer::Token From d571621585952611fce8a2bebbf4c74b0219c1d9 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:47:07 +0900 Subject: [PATCH 08/10] Refactor parameter_to_arg method to return Lexer::Token instead of Lexer::Token? --- lib/lrama/grammar/binding.rb | 6 +++--- sig/generated/lrama/grammar/binding.rbs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 9f1166af..0afb0519 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -17,7 +17,7 @@ def resolve_symbol(sym) s_value: sym.s_value, location: sym.location, args: resolved_args(sym), lhs_tag: sym.lhs_tag ) else - parameter_to_arg(sym) || sym + parameter_to_arg(sym) end end @@ -40,12 +40,12 @@ def resolved_args(sym) sym.args.map { |arg| resolve_symbol(arg) } end - # @rbs (Lexer::Token sym) -> Lexer::Token? + # @rbs (Lexer::Token sym) -> Lexer::Token def parameter_to_arg(sym) if (arg = @parameter_to_arg[sym.s_value].dup) arg.alias_name = sym.alias_name end - arg + arg || sym end # @rbs (Lexer::Token::InstantiateRule token) -> Array[String] diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index e2648ba4..23f6cd8b 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -20,8 +20,8 @@ module Lrama # @rbs (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] def resolved_args: (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] - # @rbs (Lexer::Token sym) -> Lexer::Token? - def parameter_to_arg: (Lexer::Token sym) -> Lexer::Token? + # @rbs (Lexer::Token sym) -> Lexer::Token + def parameter_to_arg: (Lexer::Token sym) -> Lexer::Token # @rbs (Lexer::Token::InstantiateRule token) -> Array[String] def token_to_args_s_values: (Lexer::Token::InstantiateRule token) -> Array[String] From 0260928255b3533d5d645e2146e4c78eadf08f65 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:51:22 +0900 Subject: [PATCH 09/10] Refactor Binding initialization to use params instead of parameterizing_rule --- lib/lrama/grammar/binding.rb | 12 ++++++------ lib/lrama/grammar/rule_builder.rb | 4 ++-- sig/generated/lrama/grammar/binding.rbs | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 0afb0519..98014767 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -4,10 +4,10 @@ module Lrama class Grammar class Binding - # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void - def initialize(parameterizing_rule, actual_args) + # @rbs (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> void + def initialize(params, actual_args) @actual_args = actual_args - @parameter_to_arg = map_params_to_args(parameterizing_rule.parameters, @actual_args) + @param_to_arg = map_params_to_args(params, @actual_args) end # @rbs (Lexer::Token sym) -> Lexer::Token @@ -17,7 +17,7 @@ def resolve_symbol(sym) s_value: sym.s_value, location: sym.location, args: resolved_args(sym), lhs_tag: sym.lhs_tag ) else - parameter_to_arg(sym) + param_to_arg(sym) end end @@ -41,8 +41,8 @@ def resolved_args(sym) end # @rbs (Lexer::Token sym) -> Lexer::Token - def parameter_to_arg(sym) - if (arg = @parameter_to_arg[sym.s_value].dup) + def param_to_arg(sym) + if (arg = @param_to_arg[sym.s_value].dup) arg.alias_name = sym.alias_name end arg || sym diff --git a/lib/lrama/grammar/rule_builder.rb b/lib/lrama/grammar/rule_builder.rb index d82da5f9..481a3780 100644 --- a/lib/lrama/grammar/rule_builder.rb +++ b/lib/lrama/grammar/rule_builder.rb @@ -73,7 +73,7 @@ def resolve_inline_rules inline_rule.rhs_list.each do |inline_rhs| rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, @parameterizing_rule_resolver, lhs_tag: lhs_tag) if token.is_a?(Lexer::Token::InstantiateRule) - resolve_inline_rhs(rule_builder, inline_rhs, i, Binding.new(inline_rule, token.args)) + resolve_inline_rhs(rule_builder, inline_rhs, i, Binding.new(inline_rule.parameters, token.args)) else resolve_inline_rhs(rule_builder, inline_rhs, i) end @@ -135,7 +135,7 @@ def process_rhs parameterizing_rule = @parameterizing_rule_resolver.find_rule(token) raise "Unexpected token. #{token}" unless parameterizing_rule - bindings = Binding.new(parameterizing_rule, token.args) + bindings = Binding.new(parameterizing_rule.parameters, token.args) lhs_s_value = bindings.concatenated_args_str(token) if (created_lhs = @parameterizing_rule_resolver.created_lhs(lhs_s_value)) @replaced_rhs << created_lhs diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index 23f6cd8b..9b2edbd0 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -3,8 +3,8 @@ module Lrama class Grammar class Binding - # @rbs (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void - def initialize: (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void + # @rbs (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> void + def initialize: (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> void # @rbs (Lexer::Token sym) -> Lexer::Token def resolve_symbol: (Lexer::Token sym) -> Lexer::Token @@ -21,7 +21,7 @@ module Lrama def resolved_args: (Lexer::Token::InstantiateRule sym) -> Array[Lexer::Token] # @rbs (Lexer::Token sym) -> Lexer::Token - def parameter_to_arg: (Lexer::Token sym) -> Lexer::Token + def param_to_arg: (Lexer::Token sym) -> Lexer::Token # @rbs (Lexer::Token::InstantiateRule token) -> Array[String] def token_to_args_s_values: (Lexer::Token::InstantiateRule token) -> Array[String] From 6b3f92d8994a73b77598b0b55f8c1209e1496761 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 22:54:44 +0900 Subject: [PATCH 10/10] Add RBS annotations for actual_args and param_to_arg in Binding class --- lib/lrama/grammar/binding.rb | 3 +++ sig/generated/lrama/grammar/binding.rbs | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/lib/lrama/grammar/binding.rb b/lib/lrama/grammar/binding.rb index 98014767..2efb918a 100644 --- a/lib/lrama/grammar/binding.rb +++ b/lib/lrama/grammar/binding.rb @@ -4,6 +4,9 @@ module Lrama class Grammar class Binding + # @rbs @actual_args: Array[Lexer::Token] + # @rbs @param_to_arg: Hash[String, Lexer::Token] + # @rbs (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> void def initialize(params, actual_args) @actual_args = actual_args diff --git a/sig/generated/lrama/grammar/binding.rbs b/sig/generated/lrama/grammar/binding.rbs index 9b2edbd0..c6818a2e 100644 --- a/sig/generated/lrama/grammar/binding.rbs +++ b/sig/generated/lrama/grammar/binding.rbs @@ -3,6 +3,10 @@ module Lrama class Grammar class Binding + @actual_args: Array[Lexer::Token] + + @param_to_arg: Hash[String, Lexer::Token] + # @rbs (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> void def initialize: (Array[Lexer::Token] params, Array[Lexer::Token] actual_args) -> void