# class Treetop::Compiler::ParsingRule

### Public Instance Methods

compile(builder) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 5
    def compile(builder)
      compile_inline_module_declarations(builder)
      generate_method_definition(builder)
    end

compile_inline_module_declarations(builder) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 10
    def compile_inline_module_declarations(builder)
      parsing_expression.inline_modules.each_with_index do |inline_module, i|
        inline_module.compile(i, builder, self)
        builder.newline
      end
    end

generate_cache_lookup(builder) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 34
    def generate_cache_lookup(builder)
      builder.if_ "node_cache[:#{name}].has_key?(index)" do
        builder.assign 'cached', "node_cache[:#{name}][index]"
        builder.if_ "cached" do
          builder << 'cached = SyntaxNode.new(input, index...(index + 1)) if cached == true'
          builder << '@index = cached.interval.end'
        end
        builder << 'return cached'
      end
    end

generate_cache_storage(builder, result_var) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 45
    def generate_cache_storage(builder, result_var)
      builder.assign "node_cache[:#{name}][start_index]", result_var
    end

generate_method_definition(builder) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 17
    def generate_method_definition(builder)
      builder.reset_addresses
      expression_address = builder.next_address
      result_var = "r#{expression_address}"

      builder.method_declaration(method_name) do
        builder.assign 'start_index', 'index'
        generate_cache_lookup(builder)
        builder.newline
        parsing_expression.compile(expression_address, builder)
        builder.newline
        generate_cache_storage(builder, result_var)
        builder.newline
        builder << result_var
      end
    end

method_name() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 49
    def method_name
      "_nt_#{name}"
    end

name() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_rule.rb, line 53
    def name
      nonterminal.text_value
    end