resolve method

void resolve(
  1. List<ProductionRule> rules
)

Implementation

void resolve(List<ProductionRule> rules) {
  _errors.clear();
  for (var rule in rules) {
    final expression = rule.expression;
    expression.accept(this);
  }

  if (_errors.isNotEmpty) {
    final sink = StringBuffer();
    for (final error in _errors) {
      final parent = error.parent;
      final child = error.child;
      final cause = error.cause;
      final effect = error.effect;
      sink.writeln('Expression errors:');
      sink.write('Rule: ');
      sink.writeln(parent.rule!.name);
      if (child == null) {
        sink.write('Expression: ');
      } else {
        sink.write('Parent: ');
      }

      sink.writeln(parent);
      if (child != null) {
        sink.write('Child: ');
        sink.writeln(child);
      }

      sink.write('Cause: ');
      sink.writeln(cause);
      sink.write('Effect: ');
      sink.writeln(effect);
      throw FormatException(sink.toString());
    }
  }
}