class Treetop::Runtime::CompiledParser

def failure_column

def failure_column
  terminal_failures && input.column_of(failure_index)
end

def failure_index

def failure_index
  max_terminal_failure_index
end

def failure_line

def failure_line
  terminal_failures && input.line_of(failure_index)
end

def failure_reason

def failure_reason
  return nil unless (tf = terminal_failures) && tf.size > 0
cted " +
.size == 1 ?
[0].expected_string :
     "one of #{tf.map{|f| f.expected_string}.uniq*', '}"

    " at line #{failure_line}, column #{failure_column} (byte #{failure_index+1})" +
    " after #{input[index...failure_index]}"
end

def initialize

def initialize
  self.consume_all_input = true
end

def parse(input, options = {})

def parse(input, options = {})
  prepare_to_parse(input)
  @index = options[:index] if options[:index]
  result = send("_nt_#{root}")
  return nil if (consume_all_input? && index != input.size)
  return result
end

def parse_anything(node_class = SyntaxNode, inline_module = nil)

def parse_anything(node_class = SyntaxNode, inline_module = nil)
  if index < input.length
    result = node_class.new(input, index...(index + 1))
    result.extend(inline_module) if inline_module
    @index += 1
    result
  else
    terminal_parse_failure("any character")
  end
end

def prepare_to_parse(input)

def prepare_to_parse(input)
  @input = input
  @input_length = input.length
  reset_index
  @node_cache = Hash.new {|hash, key| hash[key] = Hash.new}
  @terminal_failures = []
  @max_terminal_failure_index = 0
end

def reset_index

def reset_index
  @index = 0
end

def terminal_parse_failure(expected_string)

def terminal_parse_failure(expected_string)
  return nil if index < max_terminal_failure_index
  if index > max_terminal_failure_index
    @max_terminal_failure_index = index
    @terminal_failures = []
  end
  terminal_failures << TerminalParseFailure.new(index, expected_string)
  return nil
end