Either positive or negative lookahead, doesn’t consume its input.
Example:
str('foo').present? # matches when the input contains 'foo', but leaves it
# File lib/parslet/atoms/lookahead.rb, line 11 def initialize(bound_parslet, positive=true) super() # Model positive and negative lookahead by testing this flag. @positive = positive @bound_parslet = bound_parslet @error_msgs = { :positive => ["Input should start with ", bound_parslet], :negative => ["Input should not start with ", bound_parslet] } end
Call back visitors visit_lookahead method. See parslet/export for an example.
# File lib/parslet/atoms/visitor.rb, line 69 def accept(visitor) visitor.visit_lookahead(positive, bound_parslet) end
# File lib/parslet/atoms/lookahead.rb, line 45 def to_s_inner(prec) char = positive ? '&' : '!' "#{char}#{bound_parslet.to_s(prec)}" end
# File lib/parslet/atoms/lookahead.rb, line 24 def try(source, context, consume_all) rewind_pos = source.bytepos error_pos = source.pos success, value = bound_parslet.apply(source, context, consume_all) if positive return succ(nil) if success return context.err_at(self, source, @error_msgs[:positive], error_pos) else return succ(nil) unless success return context.err_at(self, source, @error_msgs[:negative], error_pos) end # This is probably the only parslet that rewinds its input in #try. # Lookaheads NEVER consume their input, even on success, that's why. ensure source.bytepos = rewind_pos end
Generated with the Darkfish Rdoc Generator 2.