Class: RParsec::AltParser

Inherits:
LookAheadSensitiveParser show all
Defined in:
lib/rparsec/alt_parser.rb

Overview

:nodoc:

Constant Summary

Constants inherited from Parser

Parser::MyMonad

Constants included from Functors

Functors::And, Functors::At, Functors::BitAnd, Functors::Call, Functors::Compare, Functors::Dec, Functors::Div, Functors::Eq, Functors::Feed, Functors::Fst, Functors::Ge, Functors::Gt, Functors::Id, Functors::Idn, Functors::Inc, Functors::Le, Functors::Lt, Functors::Match, Functors::Minus, Functors::Mod, Functors::Mul, Functors::Ne, Functors::Neg, Functors::Not, Functors::Or, Functors::Plus, Functors::Power, Functors::Snd, Functors::Succ, Functors::To_a, Functors::To_f, Functors::To_i, Functors::To_s, Functors::To_sym, Functors::Union, Functors::Xor

Instance Attribute Summary

Attributes inherited from Parser

#name

Attributes included from Monad

#this

Instance Method Summary collapse

Methods inherited from LookAheadSensitiveParser

#lookahead, #not, #visible

Methods inherited from Parser

#>>, #atomize, #bindn, #catchp, #delimited, #delimited1, #expect, #followed, #fragment, #infixl, #infixn, #infixr, #lexeme, #lookahead, #many, #many_, #map, #mapn, #nested, #not, #optional, #parse, #peek, #postfix, #prefix, #repeat, #repeat_, #separated, #separated1, #seq, #some, #some_, #to_s, #token

Methods included from Monad

#bind, #initMonad, #map, #plus, #seq, #value

Methods included from Functors

#compose, #const, #curry, #flip, make_curry, make_reverse_curry, #nth, #power, #repeat, #reverse_curry, #reverse_uncurry, #uncurry

Constructor Details

#initialize(alts, la = 1) ⇒ AltParser

Returns a new instance of AltParser.



5
6
7
8
9
# File 'lib/rparsec/alt_parser.rb', line 5

def initialize(alts, la = 1)
  super(la)
  @alts = alts
  @lookahead = la
end

Instance Method Details

#_parse(ctxt) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rparsec/alt_parser.rb', line 10

def _parse ctxt
  ind = ctxt.index
  result = ctxt.result
  err = ctxt.error
  err_ind = -1
  err_pos = -1
  for p in @alts
    ctxt.reset_error
    ctxt.index = ind
    ctxt.result = result
    return true if p._parse(ctxt)
    if ctxt.error.index > err_pos
      err = ctxt.error
      err_ind = ctxt.index
      err_pos = ctxt.error.index
    end
  end
  ctxt.index = err_ind
  ctxt.error = err
  return false
end

#withLookahead(n) ⇒ Object



31
32
33
# File 'lib/rparsec/alt_parser.rb', line 31

def withLookahead(n)
  AltParser.new(@alts, n)
end

#|(other) ⇒ Object



34
35
36
# File 'lib/rparsec/alt_parser.rb', line 34

def | other
  AltParser.new(@alts.dup << autobox_parser(other)).tap { |p| p.name = name }
end