# class Treetop::Compiler::ParsingExpression

### Attributes

address[R]
builder[R]
parent_expression[R]
subexpression_address[R]
var_symbols[R]

### Public Instance Methods

accumulate_subexpression_result() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 65
    def accumulate_subexpression_result
      builder.accumulate accumulator_var, subexpression_result_var
    end

accumulator_var() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 45
    def accumulator_var
      var(:accumulator)
    end

assign_failure(start_index_var) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 93
    def assign_failure(start_index_var)
      assign_result("nil")
    end

assign_lazily_instantiated_node() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 97
    def assign_lazily_instantiated_node
      assign_result("true")
    end

assign_result(value_ruby) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 69
    def assign_result(value_ruby)
      builder.assign result_var, value_ruby
    end

begin_comment(expression) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 133
    def begin_comment(expression)
      #builder << "# begin #{on_one_line(expression)}"
    end

compile(address, builder, parent_expression) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 6
    def compile(address, builder, parent_expression)
      @address = address
      @builder = builder
      @parent_expression = parent_expression
    end

declared_module_name() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 16
    def declared_module_name
      parent_expression && parent_expression.node_class_name
    end

decorated?() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 24
    def decorated?
      parent_expression && (parent_expression.node_class_name || parent_expression.node_class_name || parent_expression.inline_module_name)
    end

end_comment(expression) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 137
    def end_comment(expression)
      #builder << "# end #{on_one_line(expression)}"
    end

epsilon_node() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 89
    def epsilon_node
      "instantiate_node(SyntaxNode,input, index...index)"
    end

extend_result(module_name) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 73
    def extend_result(module_name)
      builder.extend result_var, module_name
    end

extend_result_with_declared_module() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 77
    def extend_result_with_declared_module
      extend_result declared_module_name if declared_module_name
    end

extend_result_with_inline_module() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 81
    def extend_result_with_inline_module
      extend_result inline_module_name if inline_module_name
    end

init_value(var_symbol) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 125
    def init_value(var_symbol)
      case var_symbol
      when :accumulator then '[]'
      when :start_index then 'index'
      else nil
      end
    end

inline_module_name() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 20
    def inline_module_name
      parent_expression && parent_expression.inline_module_name
    end

node_class_name() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 12
    def node_class_name
      parent_expression && parent_expression.node_class_name || 'SyntaxNode'
    end

obtain_new_subexpression_address() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 61
    def obtain_new_subexpression_address
      @subexpression_address = builder.next_address
    end

on_one_line(expression) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 141
    def on_one_line(expression)
      expression.text_value.tr("\n", ' ')
    end

optional_arg(arg) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 28
    def optional_arg(arg)
      if arg
        ", #{arg}"
      else
        ''
      end
    end

reset_index() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 85
    def reset_index
      builder.assign '@index', start_index_var
    end

result_var() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 41
    def result_var
      var(:result)
    end

start_index_var() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 49
    def start_index_var
      var(:start_index)
    end

subexpression_result_var() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 53
    def subexpression_result_var
      "r#{subexpression_address}"
    end

subexpression_success?() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 57
    def subexpression_success?
      subexpression_result_var
    end

use_vars(*var_symbols) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 36
    def use_vars(*var_symbols)
      @var_symbols = var_symbols
      builder << var_initialization
    end

var(var_symbol) click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 116
    def var(var_symbol)
      case var_symbol
      when :result then "r#{address}"
      when :accumulator then "s#{address}"
      when :start_index then "i#{address}"
      else raise "Unknown var symbol #{var_symbol}."
      end
    end

var_initialization() click to toggle source

    # File lib/treetop/compiler/node_classes/parsing_expression.rb, line 101
    def var_initialization
      left, right = [], []
      var_symbols.each do |symbol|
        if init_value(symbol)
          left << var(symbol)
          right << init_value(symbol)
        end
      end
      if left.empty?
        ""
      else
        left.join(', ') + ' = ' + right.join(', ')
      end
    end