From 8cd386521267bf95ae00b7068cda9422305eec29 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Wed, 27 Feb 2019 19:27:28 +0100 Subject: Fix mixed up parsing of integers/naturals --- src/lexer.rs | 4 ++-- src/parser.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/lexer.rs b/src/lexer.rs index d396951..32e6abe 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -89,11 +89,11 @@ macro_rules! digits { }} } -named!(natural<&str, usize>, preceded!(tag!("+"), digits!(usize, 10))); +named!(natural<&str, usize>, digits!(usize, 10)); named!(integral<&str, isize>, digits!(isize, 10)); named!(integer<&str, isize>, alt!( preceded!(tag!("-"), map!(integral, |i: isize| -i)) | - integral + preceded!(tag!("+"), integral) )); named!(boolean<&str, bool>, alt!( value!(true, tag!("True")) | diff --git a/src/parser.rs b/src/parser.rs index 2e252b1..8416d9b 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -13,15 +13,15 @@ pub fn parse_expr(s: &str) -> Result { #[test] fn test_parse() { use crate::core::Expr::*; - println!("test {:?}", parse_expr("+3 + +5 * +10")); + println!("test {:?}", parse_expr("3 + 5 * 10")); assert!(parse_expr("22").is_ok()); assert!(parse_expr("(22)").is_ok()); - assert_eq!(parse_expr("+3 + +5 * +10").ok(), + assert_eq!(parse_expr("3 + 5 * 10").ok(), Some(Box::new(NaturalPlus(Box::new(NaturalLit(3)), Box::new(NaturalTimes(Box::new(NaturalLit(5)), Box::new(NaturalLit(10)))))))); // The original parser is apparently right-associative - assert_eq!(parse_expr("+2 * +3 * +4").ok(), + assert_eq!(parse_expr("2 * 3 * 4").ok(), Some(Box::new(NaturalTimes(Box::new(NaturalLit(2)), Box::new(NaturalTimes(Box::new(NaturalLit(3)), Box::new(NaturalLit(4)))))))); -- cgit v1.2.3