Sha256: 1425abd2ad31c46f6355eb345bba297b40cb2649cf75d5c49481820adf8eb742

Contents?: true

Size: 987 Bytes

Versions: 1

Compression:

Stored size: 987 Bytes

Contents

module Treetop
  class NonterminalSymbol < NodePropagatingParsingExpression
    attr_reader :name, :grammar
    
    def initialize(name, grammar)
      @name = name
      @grammar = grammar
    end
        
    def parsing_expression
      grammar.get_parsing_expression(self)
    end
    
    def to_s
      name.to_s
    end

    def parse_at(input, start_index, parser)
      node_cache = parser.node_cache_for(self)
      if cached_result = node_cache[start_index]
        return cached_result
      else
        return node_cache.store(parse_at_without_caching(input, start_index, parser))
      end
    end
    
    protected
    def parse_at_without_caching(input, start_index, parser)
      result = parsing_expression.parse_at(input, start_index, parser)
      
      if result.success?
        result
      else
        return failure_at(start_index, result.nested_failures)
      end
    end
    
    def node_cache(parser)
      parser.node_cache_for(self)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
treetop-0.1.0 lib/treetop/grammar/parsing_expressions/nonterminal_symbol.rb