Sha256: c566a9a2dcc4536ed9dd6f0f8a400f0fd15e0f771e93cc2bfba70e0d9eaf98cc

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

module Treetop
  module Compiler
    class Predicate < ParsingExpression
      def compile(address, builder, parent_expression)
        super
        begin_comment(parent_expression)
        use_vars :result, :start_index
        obtain_new_subexpression_address
        parent_expression.prefixed_expression.compile(subexpression_address, builder)
        builder.if__(subexpression_success?) { when_success }
        builder.else_ { when_failure }
        end_comment(parent_expression)
      end
      
      def assign_failure
        reset_index
        super(start_index_var)
      end
      
      def assign_success
        reset_index
        assign_result epsilon_node
      end
    end
    
    class AndPredicate < Predicate
      def when_success
        assign_success
      end

      def when_failure
        assign_failure
      end
    end
    
    class NotPredicate < Predicate
      def when_success
        assign_failure
	if (e = parent.atomic.expected)
	  builder << "terminal_parse_failure(#{e}, true)"
	end
      end
      
      def when_failure
	if (e = parent.atomic.expected)
	  builder << "terminal_failures.pop"
	end
        assign_success
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
swift-pyrite-0.1.1 vendor/bundle/ruby/2.0.0/gems/treetop-1.6.3/lib/treetop/compiler/node_classes/predicate.rb
swift-pyrite-0.1.0 vendor/bundle/ruby/2.0.0/gems/treetop-1.6.3/lib/treetop/compiler/node_classes/predicate.rb
treetop-1.6.3 lib/treetop/compiler/node_classes/predicate.rb
treetop-1.6.2 lib/treetop/compiler/node_classes/predicate.rb