print out error message and add peek error

This commit is contained in:
YannAhlgrim
2026-06-03 16:50:41 +02:00
parent c53bc78b46
commit bf80781f71
2 changed files with 8 additions and 3 deletions
+3 -2
View File
@@ -117,7 +117,7 @@ impl Parser {
self.peek_token = self.lexer.next_token(); self.peek_token = self.lexer.next_token();
} }
fn parse_program(&mut self) -> ast::Program { pub fn parse_program(&mut self) -> ast::Program {
let mut program = ast::Program { let mut program = ast::Program {
statements: Vec::new(), statements: Vec::new(),
}; };
@@ -151,6 +151,7 @@ impl Parser {
self.next_token(); self.next_token();
true true
} else { } else {
self.peek_error(t);
false false
} }
} }
@@ -439,7 +440,7 @@ impl Parser {
Some(args) Some(args)
} }
fn errors(&self) -> &Vec<String> { pub fn errors(&self) -> &Vec<String> {
&self.errors &self.errors
} }
+5 -1
View File
@@ -1,7 +1,6 @@
use crate::ast::NodeTrait; use crate::ast::NodeTrait;
use crate::lexer::new; use crate::lexer::new;
use crate::parser::Parser; use crate::parser::Parser;
use crate::parser::ParserTrait;
use crate::parser::new_parser; use crate::parser::new_parser;
const PROMPT: &str = ">> "; const PROMPT: &str = ">> ";
@@ -21,6 +20,11 @@ pub fn start_repl() {
let lexer = new(input.to_string()); let lexer = new(input.to_string());
let mut parser: Parser = new_parser(lexer); let mut parser: Parser = new_parser(lexer);
let program = parser.parse_program(); let program = parser.parse_program();
for err in parser.errors() {
eprintln!("ERROR: {}", err);
}
println!("{}", program.string()); println!("{}", program.string());
} }
} }