Class: RParsec::BestParser
Overview
:nodoc:
Constant Summary
Constants inherited from Parser
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
Attributes included from Monad
Instance Method Summary collapse
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
Instance Method Details
#_parse(ctxt) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/rparsec/best_parser.rb', line 7 def _parse ctxt best_result = nil best_ind = -1 err_ind = -1 err_pos = -1 ind = ctxt.index result = ctxt.result err = ctxt.error for p in @alts ctxt.reset_error ctxt.index = ind ctxt.result = result if p._parse(ctxt) err = nil now_ind = ctxt.index if best_ind == -1 || (now_ind != best_ind && @longer == (now_ind > best_ind)) best_result = ctxt.result best_ind = now_ind end elsif best_ind < 0 # no good match found yet. if ctxt.error.index > err_pos err_ind = ctxt.index err_pos = ctxt.error.index end err = Failures.add_error(err, ctxt.error) end end if best_ind >= 0 ctxt.index = best_ind return ctxt.retn(best_result) else ctxt.error = err ctxt.index = err_ind return false end end |