This commit is contained in:
YannAhlgrim
2026-05-22 15:20:05 +02:00
parent 73ef20c4aa
commit 4accaa2edc
3 changed files with 94 additions and 1 deletions
+47
View File
@@ -0,0 +1,47 @@
use crate::{
ast,
lexer::{self, LexerTraits},
token,
};
pub struct Parser {
lexer: lexer::Lexer,
cur_token: token::Token,
peek_token: token::Token,
}
trait PaserTrait {
fn next_token(&mut self);
fn parse_program(&self) -> ast::Program;
}
pub fn new(l: lexer::Lexer) -> Parser {
let mut p: Parser = Parser {
lexer: l,
cur_token: token::Token {
literal: String::new(),
type_: String::new(),
},
peek_token: token::Token {
literal: String::new(),
type_: String::new(),
},
};
p.next_token();
p.next_token();
p
}
impl PaserTrait for Parser {
fn next_token(&mut self) {
self.cur_token = token::Token {
literal: String::from(&self.peek_token.literal),
type_: String::from(&self.peek_token.type_),
};
self.peek_token = self.lexer.next_token();
}
fn parse_program(&self) -> ast::Program {
todo!()
}
}