1
0
Fork 0
monkey-interpreter/src/parser/mod.rs

51 lines
923 B
Rust

mod ast;
mod statement;
use self::statement::Statement;
use crate::lexer::{Lexer, Token};
pub struct Parser<'a> {
lexer: Lexer<'a>,
}
impl<'a> Parser<'a> {
pub fn new(lexer: Lexer<'a>) -> Parser<'a> {
return Parser { lexer };
}
}
impl<'a> Iterator for Parser<'a> {
type Item = Statement;
fn next(&mut self) -> Option<Self::Item> {
match self.lexer.next() {
Some(Token::Let) => Statement::Let.parse(&mut self.lexer),
_ => None,
None => None,
}
}
}
#[cfg(test)]
mod tests {
use crate::lexer::Lexer;
use crate::parser::Parser;
#[test]
fn let_statements() {
let ip = "
let yr = 5;
let qq = 10;
let foobar = 8388383;
";
let lexer = Lexer::new(ip);
let stmts = Parser::new(lexer);
for stmt in stmts {
println!("{:?}", stmt);
}
}
}