Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ikasoba/parsing
https://github.com/ikasoba/parsing
Last synced: 15 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/ikasoba/parsing
- Owner: ikasoba
- Created: 2022-03-17T13:09:08.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-04-21T10:16:59.000Z (over 1 year ago)
- Last Synced: 2024-10-24T06:07:15.598Z (2 months ago)
- Language: TypeScript
- Size: 823 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# parsing
Parsing is a small parser combinator.## example
```ts
import {ignore, every, token, regex} from "@ikasoba000/parsing"
const whitespace = ignore(regex(/\s+/))
const helloWorld = every(token("Hello,"), whitespace, token("world!"))console.log(helloWorld("Hello, world!", 0)?.[0], helloWorld("hello, world!", 0)?.[0]) // [ 'hello,', 'world' ] undefined
```# usage
```ts
type Parser = (src: string, index: number) => ParsingError | null | ParserResult
```## token(pattern: string | RegExp): Parser
Generate a parser that matches a string or regexp.## regex(pattern: RegExp): Parser
Generate a parser that matches the regular expression.## option(parser: Parser): Parser
Generates an optional parser.## ignore(parser: Parser): IgnoreParser
If parsing succeeds, only the next index is returned.## some(...parsers: Parser[]): Parser
Generate a parser that matches any one of the parsers.## every(...parsers: Parser[]): Parser
Combine multiple parsers to produce a single parser.
Even when nested, the array depth remains 1.
```ts
every(token("1"), token("2"), token("3"))("123", 0) // [["1", "2", "3"], 3]
every(every(token("1"), token("2")), token("3"))("123", 0) // [["1", "2", "3"], 3]
// Both the top and bottom parsers have the same function.
```## map<T>(parser: Parser, converter: x => T): Parser<T>
it is useful for generating values from strings that can be parsed.
```ts
map(token(/[0-9]+/), x => parseInt(x))("123", 0) // {type: "normal", res: 123, index: 0, length: 3 }
```