multiplicativeExpression method

  1. @override
Parser multiplicativeExpression()
override

Implementation

@override
Parser multiplicativeExpression() =>
    super.multiplicativeExpression().map((c) {
      Expression left = c[0];
      for (var item in c[1]) {
        Expression right = item[1];
        if ((item[0] is List) &&
            (item[0][0].value == '~') &&
            (item[0][1].value == '/')) {
          left = IntegerDivisionNumberExpression(
              left as Expression<Number>, right as Expression<Number>);
          continue;
        }
        if (item[0].value == '*') {
          if (left is Expression<Number> && right is Expression<Number>) {
            left = MultiplyNumberExpression(left, right);
            continue;
          }
          if (left is Expression<Duration> && right is Expression<Integer>) {
            left = MultiplyDurationExpression(left, right);
            continue;
          }
        }
        if (item[0].value == '/') {
          if (left is Expression<Number> && right is Expression<Number>) {
            left = DivisionNumberExpression(left, right);
            continue;
          }
          if (left is Expression<Duration> && right is Expression<Integer>) {
            left = DivisionDurationExpression(left, right);
            continue;
          }

          continue;
        }
        if (item[0].value == '%') {
          left = ModuloExpression(
              left as Expression<Number>, right as Expression<Number>);
          continue;
        }
        throw UnknownExpressionTypeException(
            'Unknown multiplicative expression type');
      }
      return left;
    });