literal method
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}".',
},
),
};
}