added the null literal

This commit is contained in:
2026-07-10 14:04:38 -05:00
parent 6fb41c7331
commit 96527be678
3 changed files with 15 additions and 7 deletions
+4
View File
@@ -5,6 +5,7 @@ pub trait Expr: Stmt {}
pub enum NodeType { pub enum NodeType {
Program(Program), Program(Program),
NumericLiteral(NumericLiteral), NumericLiteral(NumericLiteral),
NullLiteral(NullLiteral),
Identifier(Identifier), Identifier(Identifier),
BinaryExpr(BinaryExpr), BinaryExpr(BinaryExpr),
EOF, EOF,
@@ -32,6 +33,9 @@ pub struct NumericLiteral {
pub value: f64, pub value: f64,
} }
#[derive(Debug)]
pub struct NullLiteral {}
impl Stmt for Program {} impl Stmt for Program {}
impl Stmt for NumericLiteral {} impl Stmt for NumericLiteral {}
+9 -6
View File
@@ -21,18 +21,20 @@ pub mod interpreter {
#[derive(Clone)] #[derive(Clone)]
pub enum Token { pub enum Token {
Number(String),
Identifier(String),
Equals,
Let,
OpenParen,
CloseParen,
BinaryOperator(String), BinaryOperator(String),
Identifier(String),
Number(String),
CloseParen,
OpenParen,
Equals,
Null,
Let,
EOF, EOF,
} }
static KEYWORDS: phf::Map<&'static str, Token> = phf::phf_map! { static KEYWORDS: phf::Map<&'static str, Token> = phf::phf_map! {
"let" => Token::Let, "let" => Token::Let,
"null" => Token::Null,
}; };
impl Token { impl Token {
@@ -79,6 +81,7 @@ pub mod interpreter {
Token::OpenParen => write!(f, "Token::OpenParen"), Token::OpenParen => write!(f, "Token::OpenParen"),
Token::CloseParen => write!(f, "Token::CloseParen"), Token::CloseParen => write!(f, "Token::CloseParen"),
Token::EOF => write!(f, "Token::EOF"), Token::EOF => write!(f, "Token::EOF"),
Token::Null => write!(f, "Token::Null"),
} }
} }
} }
+2 -1
View File
@@ -1,6 +1,6 @@
use std::process; use std::process;
use crate::ast::{BinaryExpr, Identifier, NodeType, NumericLiteral, Program}; use crate::ast::{BinaryExpr, Identifier, NodeType, NullLiteral, NumericLiteral, Program};
use crate::lexer::interpreter; use crate::lexer::interpreter;
pub struct Parser { pub struct Parser {
@@ -50,6 +50,7 @@ impl Parser {
Token::Number(n) => NodeType::NumericLiteral(NumericLiteral { Token::Number(n) => NodeType::NumericLiteral(NumericLiteral {
value: n.parse().expect(&format!("Failed to parse number: {}", n)), value: n.parse().expect(&format!("Failed to parse number: {}", n)),
}), }),
Token::Null => NodeType::NullLiteral(NullLiteral {}),
Token::EOF => NodeType::EOF, Token::EOF => NodeType::EOF,
Token::OpenParen => { Token::OpenParen => {