%or% {parcr}R Documentation

Applying alternative parsers

Description

The ⁠%or%⁠ combinator (p1 %or% p2) returns the result of p1 if p1 is successful or, if p1 fails that of p2 if p2 parses successfully, otherwise it returns a fail.

Usage

p1 %or% p2

Arguments

p1, p2

two parsers.

Value

A parser.

Pseudocode

(p1 %or% p2)(x):
  if p1(x)==[] then
    if p2(x)==[] then fail()(x) else p2(x)
  else p1(x)

where ⁠[]⁠ is the empty list.

Examples

(literal("A") %or% literal("a"))(LETTERS[1:5]) # success on first parser
(literal("A") %or% literal("a"))(letters[1:5]) # success on second parser
(literal("A") %or% literal("a"))(LETTERS[2:6]) # failure
starts_with_a <- function(x) grepl("^a",x[1])
# success on both parsers, but returns result of p1 only
(literal("a") %or% satisfy(starts_with_a)) (letters[1:5])


[Package parcr version 0.5.2 Index]