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/lalr.lalrpop | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 chomp-bench/src/arith/lalr.lalrpop (limited to 'chomp-bench/src/arith/lalr.lalrpop') diff --git a/chomp-bench/src/arith/lalr.lalrpop b/chomp-bench/src/arith/lalr.lalrpop new file mode 100644 index 0000000..fe21d01 --- /dev/null +++ b/chomp-bench/src/arith/lalr.lalrpop @@ -0,0 +1,33 @@ +use std::str::FromStr; + +grammar; + +pub Expression: i64 = { +

)*> => { + v.into_iter().fold(p, |acc, (op, p)| if op { acc + p } else { acc - p }) + } +} + +AddOp: bool = { + "+" => true, + "-" => false, +} + +Product: i64 = { + )*> => { + v.into_iter().fold(t, |acc, (op, t)| if op { acc * t } else { acc / t }) + } +} + +MulOp: bool = { + "*" => true, + "/" => false, +} + +Term: i64 = { + Number, + "-" => -<>, + "(" ")", +} + +Number: i64 = r"[0-9]+" => i64::from_str(<>).unwrap(); -- cgit v1.2.3