module Lrama
  class Grammar
    class ParameterizingRule
      class Resolver
        attr_accessor rules: Array[Grammar::ParameterizingRule::Rule]
        attr_accessor created_lhs_list: Array[Lexer::Token]

        @rules: Array[Grammar::ParameterizingRule::Rule]

        def initialize: () -> void
        def add_parameterizing_rule: (Grammar::ParameterizingRule::Rule rule) -> Array[Grammar::ParameterizingRule::Rule]
        def find_rule: (Lexer::Token::InstantiateRule token) -> Grammar::ParameterizingRule::Rule?
        def find_inline: (Lexer::Token token) -> Grammar::ParameterizingRule::Rule?
        def created_lhs: (String lhs_s_value) -> Lexer::Token?

        private

        def select_rules: (Array[Grammar::ParameterizingRule::Rule] rules, Lexer::Token::InstantiateRule token) -> Array[Grammar::ParameterizingRule::Rule]
        def select_not_inline_rules: (Array[Grammar::ParameterizingRule::Rule] rules) -> Array[Grammar::ParameterizingRule::Rule]
        def select_rules_by_name: (Array[Grammar::ParameterizingRule::Rule] rules, String rule_name) -> Array[Grammar::ParameterizingRule::Rule]
      end
    end
  end
end