From 64576ba8f08990dc8bc94ef1bec4dd502d5cef06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Sun, 10 Jan 2021 15:14:15 +0100 Subject: Simple statements --- src/compiler.rs | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'src/compiler.rs') diff --git a/src/compiler.rs b/src/compiler.rs index 218711c..5808abe 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -198,6 +198,27 @@ impl Compiler { } } + fn statement(&mut self, block: &mut Block) { + match self.peek() { + Token::Print => { + self.eat(); + self.expression(block); + block.add(Op::Print, self.line()); + if self.eat() != Token::Newline { + self.error("Expect newline after expression."); + } + }, + + _ => { + self.expression(block); + if self.eat() != Token::Newline { + self.error("Expect newline after expression."); + } + block.add(Op::Pop, None); + } + } + } + pub fn compile(&mut self, name: &str, file: &Path) -> Block { let mut block = Block::new(name, file); @@ -206,12 +227,8 @@ impl Compiler { break; } - self.expression(&mut block); - block.add(Op::Print, self.line()); + self.statement(&mut block); - if self.eat() != Token::Newline { - self.error("Invalid expression"); - } } block.add(Op::Return, self.line()); -- cgit v1.2.1