Sign in

    #ParserC

    ParserC is a parser combinator library for Moonbit.

    #Usage

    Copy from https://github.com/illusory0x0/parserc.mbt

    Parser

    pub type Parser[Token, Value] (Seq[Token]) -> (Value, Seq[Token])?
    A parser combinator

    Parser::and_then

    fn[Token, A, B] Parser::and_then(self : Parser[Token, A], other : Parser[Token, B]) -> Parser[Token, (A, B)]

    Parser::apply

    fn[Token, A, B] Parser::apply(self : Parser[Token, A], f : Parser[Token, (A) -> B]) -> Parser[Token, B]

    Parser::between

    fn[Token, A, B] Parser::between(self : Parser[Token, A], around : Parser[Token, B]) -> Parser[Token, A]

    Parser::from_ref

    fn[Token, A] Parser::from_ref(self : Ref[Parser[Token, A]]) -> Parser[Token, A]

    Parser::inner

    fn[Token, Value] Parser::inner(self : Parser[Token, Value]) -> ((Seq[Token]) -> (Value, Seq[Token])?)
    Convert newtype to its underlying type, automatically derived.

    Parser::map

    fn[Token, A, B] Parser::map(self : Parser[Token, A], f : (A) -> B) -> Parser[Token, B]

    Parser::new

    fn[Token, Value] Parser::new(f : (Seq[Token]) -> (Value, Seq[Token])?) -> Parser[Token, Value]

    Parser::omit_first

    fn[Token, A, B] Parser::omit_first(parser : Parser[Token, (A, B)]) -> Parser[Token, B]

    Parser::omit_second

    fn[Token, A, B] Parser::omit_second(parser : Parser[Token, (A, B)]) -> Parser[Token, A]

    Parser::optional

    fn[Token, A] Parser::optional(self : Parser[Token, A]) -> Parser[Token, A?]

    Parser::or_else

    fn[Token, A] Parser::or_else(self : Parser[Token, A], other : Parser[Token, A]) -> Parser[Token, A]

    Parser::or_others

    fn[Token, A] Parser::or_others(self : Parser[Token, A], others : ArrayView[Parser[Token, A]]) -> Parser[Token, A]

    Parser::parse

    fn[Token, Value] Parser::parse(self : Parser[Token, Value], sequence : Seq[Token]) -> (Value, Seq[Token])?

    Parser::repeat

    fn[Token, A] Parser::repeat(self : Parser[Token, A]) -> Parser[Token, Array[A]]

    Parser::repeat_0_to_n

    fn[Token, A] Parser::repeat_0_to_n(self : Parser[Token, A], n : Int) -> Parser[Token, Array[A]]

    Parser::repeat_0_to_n_with_sep

    fn[Token, A, B] Parser::repeat_0_to_n_with_sep(self : Parser[Token, A], n : Int, separator : Parser[Token, B]) -> Parser[Token, Array[A]]

    Parser::repeat_n

    fn[Token, A] Parser::repeat_n(self : Parser[Token, A], n : Int) -> Parser[Token, Array[A]]

    Parser::repeat_n_with_sep

    fn[Token, A, B] Parser::repeat_n_with_sep(self : Parser[Token, A], n : Int, sep : Parser[Token, B]) -> Parser[Token, Array[A]]

    Parser::repeat_with_sep

    fn[Token, A, B] Parser::repeat_with_sep(self : Parser[Token, A], separator : Parser[Token, B]) -> Parser[Token, Array[A]]

    Parser::run

    fn[Token, Value] Parser::run(self : Parser[Token, Value], sequence : Seq[Token]) -> (Value, Seq[Token])?
    Parses a sequence of tokens

    If the parsing succeeds, Some(result, rest) is returned Otherwise, None is returned.

    Seq

    pub type Seq[T] ArrayView[T]
    A possibility infinite lazy list
    impl Show for Seq[T]

    Seq::default

    fn[T] Seq::default() -> Seq[T]

    Seq::from_array

    fn[T] Seq::from_array(array : ArrayView[T]) -> Seq[T]
    Construct a sequence from array

    Seq::from_list

    fn[T] Seq::from_list(list :
    T
    [T]) -> Seq[T]
    Construct a sequence from list

    Seq::from_string

    fn Seq::from_string(str : String) -> Seq[Char]
    Construct a sequence from string

    Seq::inner

    fn[T] Seq::inner(self : Seq[T]) -> ArrayView[T]
    Convert newtype to its underlying type, automatically derived.

    Seq::is_empty

    fn[T] Seq::is_empty(self : Seq[T]) -> Bool
    Checks if the sequence is empty

    Seq::length

    fn[T] Seq::length(self : Seq[T]) -> Int

    Seq::map

    fn[T1, T2] Seq::map(seq : Seq[T1], f : (T1) -> T2) -> Seq[T2]
    Map the sequence

    If the sequence is x0, x1, ... then seq.map(f) is f(x0), f(x1), ...

    Seq::new

    fn[T] Seq::new(view : ArrayView[T]) -> Seq[T]

    Seq::peek_char

    fn Seq::peek_char(self : Seq[Char], n : Int) -> String?
    Look forward n characters

    Seq::to_array

    fn[T] Seq::to_array(self : Seq[T]) -> Array[T]

    Seq::to_iter

    fn[T] Seq::to_iter(self : Seq[T]) -> Iter[T]

    Seq::uncons

    fn[T] Seq::uncons(self : Seq[T]) -> (T, Seq[T])?
    Unwrap a sequence

    If self is empty, then seq.uncons() is None Else is Some(hd, tl) where hd is the head of the sequence and tl is the tail

    lift2

    fn[Token, A, B, C] lift2(f : (A, B) -> C) -> ((Parser[Token, A], Parser[Token, B]) -> Parser[Token, C])

    one_of

    fn[A : Show] one_of(array : Array[A]) -> Parser[Char, A]

    pchar

    fn pchar(char : Char) -> Parser[Char, Char]

    pchar_such_that

    fn pchar_such_that(predicate : (Char) -> Bool) -> Parser[Char, Char]

    pconst

    fn[Token, A] pconst(a : A) -> Parser[Token, A]
    Parser that always succeed with given value

    pdigit

    let pdigit : Parser[Char, Int]
    parse digit

    %x30-39

    pfail

    fn[Token, A] pfail() -> Parser[Token, A]
    Parser that always fail

    pint

    let pint : Parser[Char, Int]
    parser for integer

    [ "-" ] ( %x30 / (%x31-39) *(%x30-39)

    pint64

    let pint64 : Parser[Char, Int64]
    parser for integer 64 bits

    [ "-" ] ( %x30 / (%x31-39) *(%x30-39)

    pstring

    fn pstring(string : String) -> Parser[Char, String]
    parser that tries to match the given string

    pvalue

    fn[Token, Value] pvalue(predicate : (Token) -> Value?) -> Parser[Token, Value]
    Parses a token with predicate

    The predicate should return Some(value) if the tokens fulfills or None otherwise

    sequence

    fn[Token, A] sequence(parsers : Array[Parser[Token, A]]) -> Parser[Token, Array[A]]

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    © 2026 mooncakes.io