Sign in

    parserc

    A simple parser combinator

    parser
    combinator
    Download zip
    Version
    0.1.5
    License
    Apache-2.0
    Last updated
    last year
    Downloads
    53

    No dependencies

    #Parser combinator

    这是一个从 https://github.com/peter-jerry-ye/moonbit-parser-combinator fork 的项目

    A simple parser combinator 简单的语法分析组合子

    Support any stream with Seq 利用Seq支持各类流

    #Usage 使用方法

    test {
    let parser = pstring("Hello").and_then(pint)
    let Some(result, _) = parser.parse(Seq::from_string("Hello1234"))
    inspect(result, content="Hello")
    }

    Parser

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

    Parser::and_then

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

    Parser::apply

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

    Parser::between

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

    Parser::from_ref

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

    Parser::map

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

    Parser::new

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

    Parser::omit_first

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

    Parser::omit_second

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

    Parser::optional

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

    Parser::or_else

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

    Parser::or_others

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

    Parser::parse

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

    Parser::repeat

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

    Parser::repeat_0_to_n

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

    Parser::repeat_0_to_n_with_sep

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

    Parser::repeat_n

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

    Parser::repeat_n_with_sep

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

    Parser::repeat_with_sep

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

    Parser::run

    fn Parser::run[Token, Value](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] () -> (T, Seq[T])?
    A possibility infinite lazy list
    impl Show for Seq[T]

    Seq::default

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

    Seq::from_array

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

    Seq::from_list

    fn Seq::from_list[T](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::is_empty

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

    Seq::length

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

    Seq::map

    fn Seq::map[T1, T2](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 Seq::new[T](f : () -> (T, Seq[T])?) -> Seq[T]

    Seq::uncons

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

    If seq 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

    length

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

    lift2

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

    one_of

    fn one_of[A : Show](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 pconst[Token, A](a : A) -> Parser[Token, A]
    Parser that always succeed with given value

    pdigit

    let pdigit : Parser[Char, Int]
    parse digit

    %x30-39

    pfail

    fn pfail[Token, A]() -> 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 pvalue[Token, Value](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 sequence[Token, A](parsers : Array[Parser[Token, A]]) -> Parser[Token, Array[A]]