parser_combinator 0.1.10 copy "parser_combinator: ^0.1.10" to clipboard
parser_combinator: ^0.1.10 copied to clipboard

discontinuedreplaced by: peg
outdated

Parser combinator is a collection of parsers that can be used to combine basic parsers to create parsers for more complex rules.

example/example.dart

import 'package:parser_combinator/parser/chainl1.dart';
import 'package:parser_combinator/parser/choice.dart';
import 'package:parser_combinator/parser/delimited.dart';
import 'package:parser_combinator/parser/digit1.dart';
import 'package:parser_combinator/parser/map.dart';
import 'package:parser_combinator/parser/opt.dart';
import 'package:parser_combinator/parser/predicate.dart';
import 'package:parser_combinator/parser/recognize.dart';
import 'package:parser_combinator/parser/ref.dart';
import 'package:parser_combinator/parser/satisfy16.dart';
import 'package:parser_combinator/parser/skip16_while.dart';
import 'package:parser_combinator/parser/tag.dart';
import 'package:parser_combinator/parser/tags.dart';
import 'package:parser_combinator/parser/terminated.dart';
import 'package:parser_combinator/parser_combinator.dart';
import 'package:parser_combinator/parsing.dart';

void main(List<String> args) {
  const id = Recognize2(Satisfy16(isAlpha), Skip16While(isAlphanumeric));

  print(id.parseString('Abc'));
  print(id.parseString('xyz123'));

  print(calc.parseString('1 + 2 * 3'));
  print(calc.parseString('(1 + 2) * 3'));
}

const calc = _expr;

const _add = ChainL1(_mul, _addOps, _mul, _toBinary);

const _addOps = Terminated(Tags(['-', '+']), _ws);

const _closeParenthesis = Terminated(Tag(')'), _ws);

const _expr = Ref(_exprRef);

const _mul = ChainL1(_primary, _mulOps, _primary, _toBinary);

const _mulOps = Terminated(Tags(['*', '/']), _ws);

const _number = Terminated(_number_, _ws);

const _number_ = Map1(Recognize2(Opt(Tag('-')), Digit1()), num.parse);

const _openParenthesis = Terminated(Tag('('), _ws);

const _primary =
    Choice2(_number, Delimited(_openParenthesis, _expr, _closeParenthesis));

const _ws = Skip16While(isWhitespace);

Parser<String, num> _exprRef() => _add;

num _toBinary(num left, String op, num right) {
  return switch (op) {
    '-' => left - right,
    '+' => left + right,
    '*' => left * right,
    '/' => left * right,
    _ => throw ArgumentError.value(op, 'op'),
  };
}
0
likes
0
points
78
downloads

Publisher

unverified uploader

Weekly Downloads

Parser combinator is a collection of parsers that can be used to combine basic parsers to create parsers for more complex rules.

Repository (GitHub)
View/report issues

Topics

#parser #parser-combinator #parsing #peg

License

unknown (license)

Dependencies

_fe_analyzer_shared, intl, path

More

Packages that depend on parser_combinator