From 58f30a0ce9e8bb0dde99edcbbaf8e1b7757e2ee6 Mon Sep 17 00:00:00 2001 From: David Li Date: Sun, 5 Nov 2017 21:32:18 -0500 Subject: Parse empty records/function parameter lists --- src/taiga.lalrpop | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/taiga.lalrpop') diff --git a/src/taiga.lalrpop b/src/taiga.lalrpop index 0144aad..afa6433 100644 --- a/src/taiga.lalrpop +++ b/src/taiga.lalrpop @@ -7,21 +7,30 @@ pub Program: ast::Program = { Expression => ast::Program(<>), }; -RecordFields: Vec> = { - ":" "," => { +FieldList: Vec> = { + ":" "," => { let mut rest = rest; rest.push(WithLocation::new(ast::RecordField::new(n, v), l, r)); rest }, ":" "," => vec![WithLocation::new(ast::RecordField::new(n, v), l, r)], ":" => vec![WithLocation::new(ast::RecordField::new(n, v), l, r)], - "" => vec![], +}; + +RecordFields: WithLocation>> = { + "{" "}" => WithLocation::new(v, l, r), + "{" "}" => WithLocation::new(vec![], l, r), +}; + +Parameters: WithLocation>> = { + "(" ")" => WithLocation::new(v, l, r), + "(" ")" => WithLocation::new(vec![], l, r), }; Ty: WithLocation = { => <>.map(|v| ast::Ty::Name(v)), "array" "of" => <>.map(|v| ast::Ty::Array(Box::new(ast::Ty::Name(v)))), - "{" "}" => WithLocation::new(ast::Ty::Record(v), l, r), + => <>.map(|v| ast::Ty::Record(v)), }; Declaration: Box> = { @@ -31,10 +40,10 @@ Declaration: Box> = { Box::new(WithLocation::new(ast::Declaration::new_var(name, None, exp), l, r)), "type" "=" => Box::new(WithLocation::new(ast::Declaration::new_ty(name, ty), l, r)), - "function" "(" ")" "=" => - Box::new(WithLocation::new(ast::Declaration::new_fun(name, params, None, body), l, r)), - "function" "(" ")" ":" "=" => - Box::new(WithLocation::new(ast::Declaration::new_fun(name, params, Some(ty), body), l, r)), + "function" "=" => + Box::new(WithLocation::new(ast::Declaration::new_fun(name, params.value, None, body), l, r)), + "function" ":" "=" => + Box::new(WithLocation::new(ast::Declaration::new_fun(name, params.value, Some(ty), body), l, r)), }; DeclarationsList: Vec> = { -- cgit v1.2.3