rumil 0.6.0 copy "rumil: ^0.6.0" to clipboard
rumil: ^0.6.0 copied to clipboard

Parser combinator library for Dart with left recursion, stack-safe trampolining, typed errors, lazy error construction, and sealed ADT design.

rumil #

Parser combinator library for Dart 3 with left recursion, typed errors, and stack safety.

Sealed ADT with 26 parser subtypes, external interpreter with defunctionalized trampoline, Warth seed-growth left recursion, and lazy error construction. Zero external dependencies.

Usage #

import 'package:rumil/rumil.dart';

// Parse a number
final number = digit().many1.capture.map(int.parse);
number.run('42'); // Success(42, consumed: 2)

// Compose with operators
final add = symbol('+').as<int Function(int, int)>((a, b) => a + b);
final expr = number.chainl1(add);
expr.run('1+2+3'); // Success(6, consumed: 5)

// Left-recursive grammars work directly
late final Parser<ParseError, int> e;
e = rule(() =>
    defer(() => e).flatMap((l) =>
        char('+').skipThen(number).map((r) => l + r)) |
    number);
e.run('1+2+3'); // Success(6, consumed: 5)

See the main README for full documentation, combinator reference, and benchmarks.

0
likes
160
points
595
downloads

Documentation

API reference

Publisher

verified publisherardaproject.org

Weekly Downloads

Parser combinator library for Dart with left recursion, stack-safe trampolining, typed errors, lazy error construction, and sealed ADT design.

Repository (GitHub)
View/report issues

Topics

#parser #combinator #parsing

License

MIT (license)

More

Packages that depend on rumil