remove warnings

This commit is contained in:
YannAhlgrim
2026-06-03 16:55:45 +02:00
parent bf80781f71
commit 30bcf7c6b2
2 changed files with 23 additions and 46 deletions
+3 -20
View File
@@ -5,6 +5,7 @@ pub trait NodeTrait {
fn string(&self) -> String;
}
#[allow(dead_code)]
pub trait StatementTrait: NodeTrait {
fn statement_node(&self);
}
@@ -15,7 +16,6 @@ pub enum Expression {
PrefixExpression(PrefixExpression),
InfixExpression(InfixExpression),
Boolean(Boolean),
BlockStatement(BlockStatement),
IfExpression(IfExpression),
FunctionLiteral(FunctionLiteral),
CallExpression(CallExpression),
@@ -29,7 +29,6 @@ impl NodeTrait for Expression {
Expression::PrefixExpression(i) => i.token_literal(),
Expression::InfixExpression(i) => i.token_literal(),
Expression::Boolean(i) => i.token_literal(),
Expression::BlockStatement(i) => i.token_literal(),
Expression::IfExpression(i) => i.token_literal(),
Expression::FunctionLiteral(i) => i.token_literal(),
Expression::CallExpression(i) => i.token_literal(),
@@ -43,7 +42,6 @@ impl NodeTrait for Expression {
Expression::PrefixExpression(i) => i.string(),
Expression::InfixExpression(i) => i.string(),
Expression::Boolean(i) => i.string(),
Expression::BlockStatement(i) => i.string(),
Expression::IfExpression(i) => i.string(),
Expression::FunctionLiteral(i) => i.string(),
Expression::CallExpression(i) => i.string(),
@@ -51,21 +49,6 @@ impl NodeTrait for Expression {
}
}
pub struct Statement;
impl NodeTrait for Statement {
fn token_literal(&self) -> String {
todo!()
}
fn string(&self) -> String {
todo!()
}
}
impl StatementTrait for Statement {
fn statement_node(&self) {}
}
pub struct Program {
pub statements: Vec<Box<dyn StatementTrait>>,
}
@@ -186,7 +169,7 @@ impl NodeTrait for IntegerLiteral {
}
fn string(&self) -> String {
self.token.literal.clone()
self.value.to_string()
}
}
@@ -245,7 +228,7 @@ impl NodeTrait for Boolean {
}
fn string(&self) -> String {
self.token.literal.clone()
self.value.to_string()
}
}
+20 -26
View File
@@ -47,46 +47,40 @@ impl LexerTraits for Lexer {
}
fn next_token(&mut self) -> Token {
let mut tok = Token {
type_: TokenType::Illegal,
literal: String::new(),
};
self.skip_whitespace();
let lit = self.ch.unwrap();
let c = char::from(lit);
match c {
'\0' => tok = new_token(TokenType::Eof, lit),
let tok = match c {
'\0' => new_token(TokenType::Eof, lit),
'=' => {
if char::from(self.peek_char()) == '=' {
self.read_char();
let lit = String::from("==");
tok = new_token_from_str(TokenType::Eq, lit);
new_token_from_str(TokenType::Eq, String::from("=="))
} else {
tok = new_token(TokenType::Assign, lit);
new_token(TokenType::Assign, lit)
}
}
';' => tok = new_token(TokenType::Semicolon, lit),
'(' => tok = new_token(TokenType::Lparen, lit),
')' => tok = new_token(TokenType::Rparen, lit),
',' => tok = new_token(TokenType::Comma, lit),
'+' => tok = new_token(TokenType::Plus, lit),
'-' => tok = new_token(TokenType::Minus, lit),
';' => new_token(TokenType::Semicolon, lit),
'(' => new_token(TokenType::Lparen, lit),
')' => new_token(TokenType::Rparen, lit),
',' => new_token(TokenType::Comma, lit),
'+' => new_token(TokenType::Plus, lit),
'-' => new_token(TokenType::Minus, lit),
'!' => {
if char::from(self.peek_char()) == '=' {
self.read_char();
let lit = String::from("!=");
tok = new_token_from_str(TokenType::Neq, lit);
new_token_from_str(TokenType::Neq, String::from("!="))
} else {
tok = new_token(TokenType::Bang, lit);
new_token(TokenType::Bang, lit)
}
}
'/' => tok = new_token(TokenType::Slash, lit),
'*' => tok = new_token(TokenType::Asterisk, lit),
'<' => tok = new_token(TokenType::Lt, lit),
'>' => tok = new_token(TokenType::Gt, lit),
'{' => tok = new_token(TokenType::Lbrace, lit),
'}' => tok = new_token(TokenType::Rbrace, lit),
'/' => new_token(TokenType::Slash, lit),
'*' => new_token(TokenType::Asterisk, lit),
'<' => new_token(TokenType::Lt, lit),
'>' => new_token(TokenType::Gt, lit),
'{' => new_token(TokenType::Lbrace, lit),
'}' => new_token(TokenType::Rbrace, lit),
_ => {
if c.is_alphabetic() {
let lit = self.read_identifier();
@@ -96,10 +90,10 @@ impl LexerTraits for Lexer {
let lit = self.read_number();
return new_token_from_str(TokenType::Int, lit);
} else {
tok = new_token(TokenType::Illegal, lit);
new_token(TokenType::Illegal, lit)
}
}
}
};
self.read_char();
tok
}