start method

  1. @override
Parser<Node> start()

Returns the starting production of this definition.

Implementation

@override
Parser<Node> start() {
  final builder = ExpressionBuilder<Node>();

  builder
    ..primitive(ref0(dot))
    ..primitive(ref0(startAnchor))
    ..primitive(ref0(endAnchor))
    ..primitive(ref0(charClass))
    ..primitive(ref0(escape))
    ..primitive(ref0(other));

  builder.group().wrapper(char('('), char(')'), (_, value, _) => value);

  builder.group()
    ..prefix(char('!'), (_, exp) => ComplementNode(exp))
    ..postfix(char('*'), (exp, _) => QuantificationNode(exp, 0))
    ..postfix(char('+'), (exp, _) => QuantificationNode(exp, 1))
    ..postfix(char('?'), (exp, _) => QuantificationNode(exp, 0, 1))
    ..postfix(
      ref0(range),
      (exp, range) => QuantificationNode(exp, range.min, range.max),
    );

  builder.group()
    ..left(epsilon(), (left, _, right) => ConcatenationNode(left, right))
    ..optional(const EmptyNode());

  builder.group()
    ..left(char('|'), (left, _, right) => AlternationNode(left, right))
    ..left(char('&'), (left, _, right) => IntersectionNode(left, right));

  return resolve(builder.build()).end();
}