parser combinator for typescript
npm install yaparsecYet another parser combinator.
The class structure is referenced by scala-parser-combinators.
``bash`
npm install yaparsec
typescript:
`typescript
import { literal } from "yaparsec";
// literal parsing
const abcParser = literal("abc");
const parsedResult = abcParser.parse("abcdefg"); // input: "abcdefg"
console.log(parsedResult); // Success { rest: 'defg', result: 'abc' }
`
Implemented functions are based on PEG (Parsing Expression Grammar). You can find more examples in test files.
p, q: Parser
| function | description |
|:---------|:------------|
|p.parse(input)|take input for parser p|p
|p.map(fn)|map the parse result of with fn|q
|p.then(q)|sequence parser|
|p.or(q)|ordered choice parser (try only if p fails)|p*
|p.rep()||p+
|p.rep1()||p(qp)*
|p.rep1sep(q)||p?
|p.opt()||p
|p.not()|success if input does not start with |p
|p.guard()|success if input starts with , without consuming input|str
|p.saveR(q)|same as sequence, but discard left result (~>)|
|p.saveL(q)|same as sequence, but discard right result (<~)|
|p.into(fq)|2nd parser depends on the result of the 1st parser (>>)|
|seq(...ps)|sequence parser that has many sub parsers|
|lt(str)|parse specified string |regexp
|r(regexp)|parse any string match |
|decimal|decimal number parser|
|integer|integer number parser|
|email|email parser|
Type of parsers is Parser, T means the result type of parsing.
Input type is string or Input. You can manage regex as whitespace when useing Input. If string, the default regex /^\s+/ is selected.
`typescript,
// Space or char sequence is treated as whitespace`
someparser.of(new Input(inputString, /^[\s,]+/));
Parse result type is Success or Failure, T is the content type. Success has two contents, parse result and rest input. You can get the parse result to use getResult() in Success. If fail, Failure has three contents, rest input, error message and the parser name. There are in order to determine the cause of errors.
Arguments that require another parsers can all be lazy, so you can use right recursion.
`typescript``
// a*b parser
const aStarB: Parser
Yaparsec is available under the MIT license.