Add operators, math, time, string, collection, and HOF builtins to El

This commit is contained in:
Will Anderson
2026-04-29 03:58:16 -05:00
parent a42429012e
commit 8d4d9ed786
15 changed files with 972 additions and 19 deletions
+10 -6
View File
@@ -139,6 +139,9 @@ impl<'src> Lexer<'src> {
// ── Operators that may be multi-char ────────────────────────────
'+' => Token::Plus,
'*' => Token::Star,
'%' => Token::Percent,
'^' => Token::Caret,
'~' => Token::Tilde,
'-' => {
if self.eat('>') {
Token::Arrow
@@ -164,14 +167,18 @@ impl<'src> Lexer<'src> {
}
}
'<' => {
if self.eat('=') {
if self.eat('<') {
Token::Shl
} else if self.eat('=') {
Token::LtEq
} else {
Token::Lt
}
}
'>' => {
if self.eat('=') {
if self.eat('>') {
Token::Shr
} else if self.eat('=') {
Token::GtEq
} else {
Token::Gt
@@ -181,10 +188,7 @@ impl<'src> Lexer<'src> {
if self.eat('&') {
Token::And
} else {
return Err(LexError::new(
LexErrorKind::UnexpectedChar('&'),
self.span_from(start),
));
Token::Ampersand
}
}
'|' => {
+18
View File
@@ -194,6 +194,18 @@ pub enum Token {
Pipe,
/// `?` — used both for Optional types and the Try operator
QuestionMark,
/// `%` — modulo
Percent,
/// `&` — bitwise AND
Ampersand,
/// `^` — bitwise XOR
Caret,
/// `~` — bitwise NOT
Tilde,
/// `<<` — left shift
Shl,
/// `>>` — right shift
Shr,
// ── Special ───────────────────────────────────────────────────────────────
Eof,
@@ -240,6 +252,12 @@ impl std::fmt::Display for Token {
Token::At => write!(f, "@"),
Token::Pipe => write!(f, "|"),
Token::QuestionMark => write!(f, "?"),
Token::Percent => write!(f, "%"),
Token::Ampersand => write!(f, "&"),
Token::Caret => write!(f, "^"),
Token::Tilde => write!(f, "~"),
Token::Shl => write!(f, "<<"),
Token::Shr => write!(f, ">>"),
Token::BoolLiteral(b) => write!(f, "{b}"),
Token::IntLiteral(n) => write!(f, "{n}"),
Token::FloatLiteral(n) => write!(f, "{n}"),