From 3d906249120064a71256aaf8592901bb0fe36e3e Mon Sep 17 00:00:00 2001 From: Mariano Guerra Date: Wed, 28 Sep 2016 22:43:20 +0100 Subject: [PATCH] support empty map >>> {} \#{} --- src/otl_lexer.xrl | 6 ++++++ src/otl_parser.yrl | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/otl_lexer.xrl b/src/otl_lexer.xrl index cb4fc5d..4bda5c4 100644 --- a/src/otl_lexer.xrl +++ b/src/otl_lexer.xrl @@ -30,6 +30,9 @@ Close = \) OpenList = \[ CloseList = \] +OpenMap = \{ +CloseMap = \} + ConsOp = :: Sep = , Dot = \. @@ -66,6 +69,9 @@ Rules. {OpenList} : make_token(open_list, TokenLine, TokenChars). {CloseList} : make_token(close_list, TokenLine, TokenChars). +{OpenMap} : make_token(open_map, TokenLine, TokenChars). +{CloseMap} : make_token(close_map , TokenLine, TokenChars). + {ConsOp} : make_token(cons_op, TokenLine, TokenChars). {Sep} : make_token(sep, TokenLine, TokenChars). {Dot} : make_token(dot, TokenLine, TokenChars). diff --git a/src/otl_parser.yrl b/src/otl_parser.yrl index 2c0ffc6..cdb9edc 100644 --- a/src/otl_parser.yrl +++ b/src/otl_parser.yrl @@ -9,7 +9,7 @@ Nonterminals bool_and_op match literal - list tuple + list tuple map list_items seq_items fn_call. @@ -23,6 +23,7 @@ Terminals atom open close open_list close_list + open_map close_map cons_op sep concat_op @@ -82,11 +83,14 @@ literal -> atom : '$1'. literal -> open bool_or_op close : '$2'. literal -> list : '$1'. literal -> tuple : '$1'. +literal -> map : '$1'. literal -> fn_call : '$1'. list -> open_list close_list : {nil, line('$1')}. list -> open_list list_items close_list : '$2'. +map -> open_map close_map : {map, line('$1'), []}. + list_items -> literal : {cons, line('$1'), '$1', {nil, line('$1')}}. list_items -> literal sep : {cons, line('$1'), '$1', {nil, line('$1')}}. list_items -> literal sep list_items : {cons, line('$1'), '$1', '$3'}.