added the null literal
This commit is contained in:
@@ -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
@@ -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
@@ -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 => {
|
||||||
|
|||||||
Reference in New Issue
Block a user