parsers 1.0.0 copy "parsers: ^1.0.0" to clipboard
parsers: ^1.0.0 copied to clipboard

Dart 1 only

Parser combinators for Dart. Parser combinators let you write complex parsers by combining smaller, less complex parsers.

Parser Combinators for Dart #

Check out the user guide (work in progress) and the API reference.

Quick Start #

import 'package:parsers/parsers.dart';
import 'dart:math';

// grammar

final number = digit.many1       ^ digits2int
             | string('none')    ^ none
             | string('answer')  ^ answer;

final comma = char(',') < spaces;

final numbers = number.sepBy(comma) < eof;

// actions

digits2int(digits) => parseInt(Strings.concatAll(digits));
none(_) => null;
answer(_) => 42;

// parsing

main() {
  print(numbers.parse('0,1, none, 3,answer'));
  // [0, 1, null, 3, 42]

  print(numbers.parse('0,1, boom, 3,answer'));
  // line 1, character 6: expected digit, 'none' or 'answer', got 'b'.
}

See the example directory for advanced usage.

About #

This library is heavily inspired by Parsec, but differs on some points. In particular, the | operator has a sane backtracking semantics, as in Polyparse. As a consequence it is slower but also easier to use. I've also introduced some syntax for transforming parsing results that doesn't require any knowledge of monads or applicative functors and features uncurried functions, which are nicer-looking than curried ones in Dart.

0
likes
15
pub points
0%
popularity

Publisher

unverified uploader

Parser combinators for Dart. Parser combinators let you write complex parsers by combining smaller, less complex parsers.

Repository (GitHub)
View/report issues

Documentation

Documentation

License

BSD-3-Clause (LICENSE)

Dependencies

persistent

More

Packages that depend on parsers