From 5258b95712a0abd6ea908f8b35d06b72193bf502 Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Sat, 21 Dec 2019 18:04:39 +0300 Subject: [PATCH] Better dot notation --- src/Language.ml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Language.ml b/src/Language.ml index b47669ce0..34a4d4bc3 100644 --- a/src/Language.ml +++ b/src/Language.ml @@ -634,9 +634,9 @@ module Expr = basic[def][infix][atr]: !(expr (fun x -> x) (Array.map (fun (a, (atr, l)) -> a, (atr, List.map (fun (s, _, f) -> ostap (- $(s)), f) l)) infix) (primary def infix) atr); primary[def][infix][atr]: - b:base[def][infix][Val] is:( "[" i:parse[def][infix][Val] "]" {`Elem i} - | -"." (%"length" {`Len} | %"string" {`Str} | f:LIDENT {`Post f}) - | "(" args:!(Util.list0)[parse def infix Val] ")" {`Call args} + b:base[def][infix][Val] is:( "[" i:parse[def][infix][Val] "]" {`Elem i} + | -"." (%"length" {`Len} | %"string" {`Str} | f:LIDENT args:(-"(" !(Util.list)[parse def infix Val] -")")? {`Post (f, args)}) + | "(" args:!(Util.list0)[parse def infix Val] ")" {`Call args} )+ => {match (List.hd (List.rev is)), atr with | `Elem i, Reff -> true @@ -649,22 +649,22 @@ module Expr = List.fold_left (fun b -> function - | `Elem i -> Elem (b, i) - | `Len -> Length b - | `Str -> StringVal b - | `Post f -> Call (Var f, [b]) - | `Call args -> (match b with Sexp _ -> invalid_arg "retry!" | _ -> Call (b, args)) + | `Elem i -> Elem (b, i) + | `Len -> Length b + | `Str -> StringVal b + | `Post (f, args) -> Call (Var f, b :: match args with None -> [] | Some args -> args) + | `Call args -> (match b with Sexp _ -> invalid_arg "retry!" | _ -> Call (b, args)) ) b is in let res = match lastElem, atr with - | `Elem i, Reff -> ElemRef (b, i) - | `Elem i, _ -> Elem (b, i) - | `Len, _ -> Length b - | `Str, _ -> StringVal b - | `Post f, _ -> Call (Var f, [b]) - | `Call args, _ -> (match b with Sexp _ -> invalid_arg "retry!" | _ -> Call (b, args)) + | `Elem i , Reff -> ElemRef (b, i) + | `Elem i , _ -> Elem (b, i) + | `Len , _ -> Length b + | `Str , _ -> StringVal b + | `Post (f, args), _ -> Call (Var f, b :: match args with None -> [] | Some args -> args) + | `Call args , _ -> (match b with Sexp _ -> invalid_arg "retry!" | _ -> Call (b, args)) in ignore atr res }