literal method

MathExpr literal()

Implementation

MathExpr literal() {
  final token = peek();

  return switch (token.type) {
    TokenType.kFunc => declFuncExpr(),
    TokenType.kTrue => trueExpr(),
    TokenType.kFalse => falseExpr(),
    TokenType.kNumber => numberLiteral(),
    TokenType.kString => stringLiteral(),
    TokenType.kNil => nilLiteral(),
    TokenType.kRaw => rawExpr(),
    TokenType.kSelf => selfExpr(),
    TokenType.kLParen => groupExpr(),
    final TokenType type => advanceAndThen(
      () => throw switch (type) {
        // More helpful error if the user tried to use the = operator.
        TokenType.kAssign =>
          '${token.pos} Assignment is not a value expression.',
        // Else, provide the default error.
        _ => '${token.pos} Expected literal value or variable. Found "${token.lexeme}".',
      },
    ),
  };
}