added the null literal
This commit is contained in:
@@ -5,6 +5,7 @@ pub trait Expr: Stmt {}
|
||||
pub enum NodeType {
|
||||
Program(Program),
|
||||
NumericLiteral(NumericLiteral),
|
||||
NullLiteral(NullLiteral),
|
||||
Identifier(Identifier),
|
||||
BinaryExpr(BinaryExpr),
|
||||
EOF,
|
||||
@@ -32,6 +33,9 @@ pub struct NumericLiteral {
|
||||
pub value: f64,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct NullLiteral {}
|
||||
|
||||
impl Stmt for Program {}
|
||||
|
||||
impl Stmt for NumericLiteral {}
|
||||
|
||||
+9
-6
@@ -21,18 +21,20 @@ pub mod interpreter {
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum Token {
|
||||
Number(String),
|
||||
Identifier(String),
|
||||
Equals,
|
||||
Let,
|
||||
OpenParen,
|
||||
CloseParen,
|
||||
BinaryOperator(String),
|
||||
Identifier(String),
|
||||
Number(String),
|
||||
CloseParen,
|
||||
OpenParen,
|
||||
Equals,
|
||||
Null,
|
||||
Let,
|
||||
EOF,
|
||||
}
|
||||
|
||||
static KEYWORDS: phf::Map<&'static str, Token> = phf::phf_map! {
|
||||
"let" => Token::Let,
|
||||
"null" => Token::Null,
|
||||
};
|
||||
|
||||
impl Token {
|
||||
@@ -79,6 +81,7 @@ pub mod interpreter {
|
||||
Token::OpenParen => write!(f, "Token::OpenParen"),
|
||||
Token::CloseParen => write!(f, "Token::CloseParen"),
|
||||
Token::EOF => write!(f, "Token::EOF"),
|
||||
Token::Null => write!(f, "Token::Null"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
use std::process;
|
||||
|
||||
use crate::ast::{BinaryExpr, Identifier, NodeType, NumericLiteral, Program};
|
||||
use crate::ast::{BinaryExpr, Identifier, NodeType, NullLiteral, NumericLiteral, Program};
|
||||
use crate::lexer::interpreter;
|
||||
|
||||
pub struct Parser {
|
||||
@@ -50,6 +50,7 @@ impl Parser {
|
||||
Token::Number(n) => NodeType::NumericLiteral(NumericLiteral {
|
||||
value: n.parse().expect(&format!("Failed to parse number: {}", n)),
|
||||
}),
|
||||
Token::Null => NodeType::NullLiteral(NullLiteral {}),
|
||||
Token::EOF => NodeType::EOF,
|
||||
|
||||
Token::OpenParen => {
|
||||
|
||||
Reference in New Issue
Block a user