From bb3c8d1455f7a102a0c0abffd757ccace94f77d5 Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Tue, 20 Apr 2021 13:22:49 +0100 Subject: Add LALRPOP arithmetic parser. --- chomp-bench/src/arith/mod.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'chomp-bench/src/arith/mod.rs') diff --git a/chomp-bench/src/arith/mod.rs b/chomp-bench/src/arith/mod.rs index 37432d5..38556fe 100644 --- a/chomp-bench/src/arith/mod.rs +++ b/chomp-bench/src/arith/mod.rs @@ -1,39 +1,51 @@ use chewed::{ParseError, TakeError}; +use lalrpop_util::lalrpop_mod; pub mod nibble; +lalrpop_mod!(pub lalr, "/arith/lalr.rs"); pub fn take_number(input: &mut P) -> Result { let mut out = None; loop { - match input.next() { + match input.peek() { Some('0') => { + input.consume_str("0")?; out = Some(out.unwrap_or_default() * 10); } Some('1') => { + input.consume_str("1")?; out = Some(out.unwrap_or_default() * 10 + 1); } Some('2') => { + input.consume_str("2")?; out = Some(out.unwrap_or_default() * 10 + 2); } Some('3') => { + input.consume_str("3")?; out = Some(out.unwrap_or_default() * 10 + 3); } Some('4') => { + input.consume_str("4")?; out = Some(out.unwrap_or_default() * 10 + 4); } Some('5') => { + input.consume_str("5")?; out = Some(out.unwrap_or_default() * 10 + 5); } Some('6') => { + input.consume_str("6")?; out = Some(out.unwrap_or_default() * 10 + 6); } Some('7') => { + input.consume_str("7")?; out = Some(out.unwrap_or_default() * 10 + 7); } Some('8') => { + input.consume_str("8")?; out = Some(out.unwrap_or_default() * 10 + 8); } Some('9') => { + input.consume_str("9")?; out = Some(out.unwrap_or_default() * 10 + 9); } Some(c) => { @@ -80,13 +92,15 @@ pub fn take_product(input: &mut P) -> Result(input: &mut P) -> Result