From 72ad56209fe10e3120c19ca5b820ff267423ab1d Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sat, 11 Apr 2020 15:41:21 +0100 Subject: spec: fix precedence of `===` and `with` --- dhall/src/syntax/text/dhall.abnf | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'dhall/src/syntax/text/dhall.abnf') diff --git a/dhall/src/syntax/text/dhall.abnf b/dhall/src/syntax/text/dhall.abnf index 1c3a980..861f7b3 100644 --- a/dhall/src/syntax/text/dhall.abnf +++ b/dhall/src/syntax/text/dhall.abnf @@ -757,6 +757,11 @@ expression = ; NOTE: Backtrack if parsing this alternative fails / operator-expression whsp arrow whsp expression + ; "a with x = b" + ; + ; NOTE: Backtrack if parsing this alternative fails + / with-expression + ; "merge e1 e2 : t" ; ; NOTE: Backtrack if parsing this alternative fails since we can't tell @@ -792,9 +797,16 @@ let-binding = let whsp1 nonreserved-label whsp [ ":" whsp1 expression whsp ] "=" empty-list-literal = "[" whsp [ "," whsp ] "]" whsp ":" whsp1 application-expression -operator-expression = import-alt-expression +with-expression = + import-expression 1*(whsp1 with whsp1 with-clause) + +with-clause = + any-label-or-some *(whsp "." whsp any-label-or-some) whsp "=" whsp operator-expression + +operator-expression = equivalent-expression ; Nonempty-whitespace to disambiguate `http://a/a?a` +equivalent-expression = import-alt-expression *(whsp equivalent whsp import-alt-expression) import-alt-expression = or-expression *(whsp "?" whsp1 or-expression) or-expression = plus-expression *(whsp "||" whsp plus-expression) ; Nonempty-whitespace to disambiguate `f +2` @@ -807,13 +819,7 @@ prefer-expression = combine-types-expression *(whsp prefer whsp combine-t combine-types-expression = times-expression *(whsp combine-types whsp times-expression) times-expression = equal-expression *(whsp "*" whsp equal-expression) equal-expression = not-equal-expression *(whsp "==" whsp not-equal-expression) -not-equal-expression = equivalent-expression *(whsp "!=" whsp equivalent-expression) -equivalent-expression = with-expression *(whsp equivalent whsp with-expression) - -with-expression = application-expression *(whsp1 with whsp1 with-clause) - -with-clause = - any-label-or-some *(whsp "." whsp any-label-or-some) whsp "=" whsp application-expression +not-equal-expression = application-expression *(whsp "!=" whsp application-expression) ; Import expressions need to be separated by some whitespace, otherwise there -- cgit v1.2.3