Sha256: d470e57c7cc29c1b95cba2ea3d0bbe29f69c9215d13c17455520fb74cfdefa23

Contents?: true

Size: 804 Bytes

Versions: 1

Compression:

Stored size: 804 Bytes

Contents

module Lrama
  class Grammar
    class ParameterizingRuleResolver
      def initialize
        @parameterizing_rule_builders = []
      end

      def add_parameterizing_rule_builder(builder)
        @parameterizing_rule_builders << builder
      end

      def defined?(name)
        !rule_builders(name).empty?
      end

      def build_rules(token, rule_counter, lhs_tag, line)
        builder = rule_builders(token.s_value).last
        raise "Unknown parameterizing rule #{token.s_value} at line #{token.line}" unless builder

        builder.build_rules(token, token.args, rule_counter, lhs_tag, line, @parameterizing_rule_builders)
      end

      private

      def rule_builders(name)
        @parameterizing_rule_builders.select { |builder| builder.name == name }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lrama-0.6.0 lib/lrama/grammar/parameterizing_rule_resolver.rb