git.dumitru.net fructose / master src / parser / Parsers.ts
master

Tree @master (Download .tar.gz)

Parsers.ts @masterraw · history · blame

import CharParser from "./base/CharParser";
import RegexParser from "./base/RegexParser";
import AnyOfParser from "./combinators/AnyOfParser";
import EitherParser from "./combinators/EitherParser";
import IntoParser from "./combinators/IntoParser";
import NamedParser from "./combinators/NamedParser";
import OptionalParser from "./combinators/OptionalParser";
import SequenceParser from "./combinators/SequenceParser";
import ZeroOrMoreParser from "./combinators/ZeroOrMoreParser";
import Parser from "./Parser";

export function opt<T>(p: () => Parser<T>): Parser<T | null> {
  return new OptionalParser(p);
}

export function either<L, R>(l: () => Parser<L>, r: () => Parser<R>): Parser<L | R> {
  return new EitherParser(l, r);
}

export function anyOf<T>(options: Array<() => Parser<T>>): Parser<T> {
  return new AnyOfParser(options);
}

export function zeroOrMore<T>(p: () => Parser<T>): Parser<T[]> {
  return new ZeroOrMoreParser(p);
}

export function seq<T>(ps: Array<() => Parser<T>>): Parser<T[]> {
  return new SequenceParser(ps);
}

export function regex(r: RegExp): Parser<string> {
  return new RegexParser(r);
}

export function matchChar(ch: string): Parser<string> {
  return new CharParser(ch);
}

export function into<F, T>(p: () => Parser<F>, t: (from: F) => T): Parser<T> {
  return new IntoParser(p, t);
}

export function named<T>(name: string, p: () => Parser<T>): Parser<T> {
  return new NamedParser(name, p);
}