From 188631f3bb263700c34d578af5968ab80e699485 Mon Sep 17 00:00:00 2001 From: JJ Date: Wed, 12 Apr 2023 20:06:40 -0700 Subject: minor cleanups --- src/parser.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/parser.rs') diff --git a/src/parser.rs b/src/parser.rs index add31d9..6e6a262 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -47,21 +47,23 @@ pub fn parse_lambda(input: &str) -> Result Type = k:"empty" {Type::Empty} - rule unit() -> Type = k:"unit" {Type::Unit} - rule boolean() -> Type = k:"bool" {Type::Boolean} - rule natural() -> Type = k:"nat" {Type::Natural} - rule integer() -> Type = k:"int" {Type::Integer} + rule primitive() -> Type + = k:$("empty" / "unit" / "bool" / "nat" / "int") { + match k { + "empty" => Type::Empty, + "unit" => Type::Unit, + "bool" => Type::Boolean, + "nat" => Type::Natural, + "int" => Type::Integer, + _ => Type::Empty + } + } // fixme: brackets are necessary here rule function() -> Type = "(" f:kind() " "* "->" " "* t:kind() ")" { Type::Function { from: Box::new(f), to: Box::new(t) } } rule kind() -> Type - = k:(function() / empty() / unit() / boolean() / natural() / integer()) { + = k:(function() / primitive()) { k } rule ann() -> Expression -- cgit v1.2.3-70-g09d2