parser-combinators
v1.1.3
Published
A library of parser combinators, with which you can create your own parsers. The library will be continuously improved in time.
Downloads
15
Maintainers
Readme
Parser Combinators
A library of parser combinators, with which you can create your own parsers.
Parser combinators can be used for:
- Replacing complicated regular expressions with easy-to-understand parsers
- Incorporating custom languages into your application
- Introducing higher-order functions and parsing concepts
This package:
- Has full TypeScript support and is made with
strict
mode on - Is thoroughly tested
- Is made in the Simplicity first philosophy
- Will be continuously improved in time
As of now it contains the following combinators:
- Standard combinators:
any
between
exhaust
many
(andzeroOrMany
,oneOrMany
,oneOrManyRed
)map
opt
ionalregex
seq
uencestr
ing
- Utility combinators:
ref
erexpect
expectErase
surely
- Ready-made value combinators:
spaces
spacesPlus
wspaces
bool
(andboolP
)int
(andintP
)real
(andrealP
)
- Whole parsers:
- Extended Backus-Naur Form (
EBNF
) - JavaScript Object Notation (
JSON
)
- Extended Backus-Naur Form (
Example usage:
Using standard combinators:
import { seq, str, any } from 'parser-combinators/parsers';
import { ParseText } from 'parser-combinators';
const parser = seq(str('a'), any(str('b'), str('c')));
const result = ParseText('ab', parser); // Will return ['a', 'b']
Using ready value combinators:
import { wspaces, str, realP, map } from 'parser-combinators/parsers';
import { ParseText } from 'parser-combinators';
const parser = map(
seq(wspaces, str('number:'), wspaces, realP, wspaces),
([,,, data]) => data
);
const result = ParseText(' number: 1.75 ', parser); // Will return 1.75
Using ref
to expand the parser's possibilities:
import { wspaces, str, realP, map } from 'parser-combinators/parsers';
import { ParseText } from 'parser-combinators';
const parser = ref(
map(
seq(wspaces, str('number:'), wspaces, realP, wspaces),
([,,, data]) => data
),
data => data > 1.5,
'The number must be over 1.5!'
);
const result = ParseText(' number: 1.25 ', parser); // Will throw a ParseError('The number must be over 1.5!')