Parse multiple statements

- parse() now parses a Vec<Statement> that can represent basically a
  full program
- Now multiple lines / statements are parsed together
This commit is contained in:
Daniel M 2021-12-24 01:56:35 +01:00
parent 41b7247ffd
commit 6bd58a4ecb
2 changed files with 19 additions and 4 deletions

View File

@ -4,7 +4,9 @@ use plang2_lib::*;
fn main() { fn main() {
let code = r#" let code = r#"
a = 54 * sqrt(9); a = 54 * 3;
b = 5;
print("{}", a + b);
"#; "#;
let mut lexer = Lexer::new(code); let mut lexer = Lexer::new(code);

View File

@ -48,8 +48,21 @@ impl Parser {
self.tokens.advance() self.tokens.advance()
} }
pub fn parse(&mut self) -> PRes<Statement> { pub fn parse(&mut self) -> PRes<Vec<Statement>> {
self.parse_statement() let mut prog = Vec::new();
while let Some(tok) = self.curr() {
match tok {
// Skip empty statements like duplicate or redundant semicolons
Token::Semicolon => {
self.advance();
continue;
}
_ => prog.push(self.parse_statement()?),
}
}
Ok(prog)
} }
pub fn parse_statement(&mut self) -> PRes<Statement> { pub fn parse_statement(&mut self) -> PRes<Statement> {