From e8443937fdd93a62512ac81ec9e6404403fcf977 Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Wed, 20 Mar 2019 12:28:25 +0100 Subject: [PATCH] Changed "||" -> "or" and "&&" -> "and" to be more Pascal-like. --- LexToken.mli | 26 +++++----- LexToken.mll | 106 ++++++++++++++++++++-------------------- Lexer.mll | 2 +- ParToken.mly | 4 +- Parser.mly | 4 +- Tests/crowdfunding.ligo | 8 +-- 6 files changed, 74 insertions(+), 76 deletions(-) diff --git a/LexToken.mli b/LexToken.mli index 1e31dcc97..4ac097d6c 100644 --- a/LexToken.mli +++ b/LexToken.mli @@ -50,8 +50,6 @@ type t = | ASS of Region.t (* ":=" *) | EQUAL of Region.t (* "=" *) | COLON of Region.t (* ":" *) -| OR of Region.t (* "||" *) -| AND of Region.t (* "&&" *) | LT of Region.t (* "<" *) | LEQ of Region.t (* "<=" *) | GT of Region.t (* ">" *) @@ -67,33 +65,35 @@ type t = (* Keywords *) +| And of Region.t (* "and" *) | Begin of Region.t (* "begin" *) | Case of Region.t (* "case" *) | Const of Region.t (* "const" *) | Down of Region.t (* "down" *) +| Else of Region.t (* "else" *) +| End of Region.t (* "end" *) +| Entrypoint of Region.t (* "entrypoint" *) | Fail of Region.t (* "fail" *) +| For of Region.t (* "for" *) +| Function of Region.t (* "function" *) | If of Region.t (* "if" *) | In of Region.t (* "in" *) | Is of Region.t (* "is" *) -| Entrypoint of Region.t (* "entrypoint" *) -| For of Region.t (* "for" *) -| Function of Region.t (* "function" *) -| Type of Region.t (* "type" *) -| Of of Region.t (* "of" *) -| Var of Region.t (* "var" *) -| End of Region.t (* "end" *) -| Then of Region.t (* "then" *) -| Else of Region.t (* "else" *) | Map of Region.t (* "map" *) +| Mod of Region.t (* "mod" *) +| Not of Region.t (* "not" *) +| Of of Region.t (* "of" *) +| Or of Region.t (* "or" *) | Patch of Region.t (* "patch" *) | Procedure of Region.t (* "procedure" *) | Record of Region.t (* "record" *) | Skip of Region.t (* "skip" *) | Step of Region.t (* "step" *) | Storage of Region.t (* "storage" *) +| Then of Region.t (* "then" *) | To of Region.t (* "to" *) -| Mod of Region.t (* "mod" *) -| Not of Region.t (* "not" *) +| Type of Region.t (* "type" *) +| Var of Region.t (* "var" *) | While of Region.t (* "while" *) | With of Region.t (* "with" *) diff --git a/LexToken.mll b/LexToken.mll index be5c9bce0..a0d17b2c5 100644 --- a/LexToken.mll +++ b/LexToken.mll @@ -49,8 +49,6 @@ type t = | ASS of Region.t | EQUAL of Region.t | COLON of Region.t -| OR of Region.t -| AND of Region.t | LT of Region.t | LEQ of Region.t | GT of Region.t @@ -66,35 +64,37 @@ type t = (* Keywords *) -| Begin of Region.t -| Case of Region.t -| Const of Region.t -| Down of Region.t -| Fail of Region.t -| If of Region.t -| In of Region.t -| Is of Region.t -| Entrypoint of Region.t -| For of Region.t -| Function of Region.t -| Type of Region.t -| Of of Region.t -| Var of Region.t -| End of Region.t -| Then of Region.t -| Else of Region.t -| Map of Region.t -| Patch of Region.t -| Procedure of Region.t -| Record of Region.t -| Skip of Region.t -| Step of Region.t -| Storage of Region.t -| To of Region.t -| Mod of Region.t -| Not of Region.t -| While of Region.t -| With of Region.t +| And of Region.t (* "and" *) +| Begin of Region.t (* "begin" *) +| Case of Region.t (* "case" *) +| Const of Region.t (* "const" *) +| Down of Region.t (* "down" *) +| Else of Region.t (* "else" *) +| End of Region.t (* "end" *) +| Entrypoint of Region.t (* "entrypoint" *) +| Fail of Region.t (* "fail" *) +| For of Region.t (* "for" *) +| Function of Region.t (* "function" *) +| If of Region.t (* "if" *) +| In of Region.t (* "in" *) +| Is of Region.t (* "is" *) +| Map of Region.t (* "map" *) +| Mod of Region.t (* "mod" *) +| Not of Region.t (* "not" *) +| Of of Region.t (* "of" *) +| Or of Region.t (* "or" *) +| Patch of Region.t (* "patch" *) +| Procedure of Region.t (* "procedure" *) +| Record of Region.t (* "record" *) +| Skip of Region.t (* "skip" *) +| Step of Region.t (* "step" *) +| Storage of Region.t (* "storage" *) +| Then of Region.t (* "then" *) +| To of Region.t (* "to" *) +| Type of Region.t (* "type" *) +| Var of Region.t (* "var" *) +| While of Region.t (* "while" *) +| With of Region.t (* "with" *) (* Types *) (* @@ -169,8 +169,6 @@ let proj_token = function | ASS region -> region, "ASS" | EQUAL region -> region, "EQUAL" | COLON region -> region, "COLON" -| OR region -> region, "OR" -| AND region -> region, "AND" | LT region -> region, "LT" | LEQ region -> region, "LEQ" | GT region -> region, "GT" @@ -186,33 +184,35 @@ let proj_token = function (* Keywords *) +| And region -> region, "And" | Begin region -> region, "Begin" | Case region -> region, "Case" | Const region -> region, "Const" | Down region -> region, "Down" +| Else region -> region, "Else" +| End region -> region, "End" +| Entrypoint region -> region, "Entrypoint" | Fail region -> region, "Fail" +| For region -> region, "For" +| Function region -> region, "Function" | If region -> region, "If" | In region -> region, "In" | Is region -> region, "Is" -| Entrypoint region -> region, "Entrypoint" -| For region -> region, "For" -| Function region -> region, "Function" -| Type region -> region, "Type" -| Of region -> region, "Of" -| Var region -> region, "Var" -| End region -> region, "End" -| Then region -> region, "Then" -| Else region -> region, "Else" | Map region -> region, "Map" +| Mod region -> region, "Mod" +| Not region -> region, "Not" +| Of region -> region, "Of" +| Or region -> region, "Or" | Patch region -> region, "Patch" | Procedure region -> region, "Procedure" | Record region -> region, "Record" | Skip region -> region, "Skip" | Step region -> region, "Step" | Storage region -> region, "Storage" +| Then region -> region, "Then" | To region -> region, "To" -| Mod region -> region, "Mod" -| Not region -> region, "Not" +| Type region -> region, "Type" +| Var region -> region, "Var" | While region -> region, "While" | With region -> region, "With" @@ -254,8 +254,6 @@ let to_lexeme = function | ASS _ -> ":=" | EQUAL _ -> "=" | COLON _ -> ":" -| OR _ -> "||" -| AND _ -> "&&" | LT _ -> "<" | LEQ _ -> "<=" | GT _ -> ">" @@ -271,6 +269,7 @@ let to_lexeme = function (* Keywords *) +| And _ -> "and" | Begin _ -> "begin" | Case _ -> "case" | Const _ -> "const" @@ -284,6 +283,7 @@ let to_lexeme = function | Function _ -> "function" | Type _ -> "type" | Of _ -> "of" +| Or _ -> "or" | Var _ -> "var" | End _ -> "end" | Then _ -> "then" @@ -324,6 +324,7 @@ let to_region token = proj_token token |> fst (* LEXIS *) let keywords = [ + (fun reg -> And reg); (fun reg -> Begin reg); (fun reg -> Case reg); (fun reg -> Const reg); @@ -337,6 +338,7 @@ let keywords = [ (fun reg -> Function reg); (fun reg -> Type reg); (fun reg -> Of reg); + (fun reg -> Or reg); (fun reg -> Var reg); (fun reg -> End reg); (fun reg -> Then reg); @@ -357,8 +359,7 @@ let keywords = [ let reserved = let open SSet in - empty |> add "and" - |> add "as" + empty |> add "as" |> add "asr" |> add "assert" |> add "class" @@ -388,7 +389,6 @@ let reserved = |> add "nonrec" |> add "object" |> add "open" - |> add "or" |> add "private" |> add "rec" |> add "sig" @@ -500,8 +500,6 @@ let mk_sym lexeme region = | ":=" -> ASS region | "=" -> EQUAL region | ":" -> COLON region - | "||" -> OR region - | "&&" -> AND region | "<" -> LT region | "<=" -> LEQ region | ">" -> GT region @@ -549,7 +547,8 @@ let is_ident = function | _ -> false let is_kwd = function - Begin _ + And _ +| Begin _ | Case _ | Const _ | Down _ @@ -562,6 +561,7 @@ let is_kwd = function | Function _ | Type _ | Of _ +| Or _ | Var _ | End _ | Then _ @@ -604,8 +604,6 @@ let is_sym = function | ASS _ | EQUAL _ | COLON _ -| OR _ -| AND _ | LT _ | LEQ _ | GT _ diff --git a/Lexer.mll b/Lexer.mll index b18310d55..547599f3b 100644 --- a/Lexer.mll +++ b/Lexer.mll @@ -462,7 +462,7 @@ let esc = "\\n" | "\\\"" | "\\\\" | "\\b" let symbol = ';' | ',' | '(' | ')' | '{' | '}' | '[' | ']' | '#' | '|' | "->" | ":=" | '=' | ':' - | "||" | "&&" | '<' | "<=" | '>' | ">=" | "=/=" + | '<' | "<=" | '>' | ">=" | "=/=" | '+' | '-' | '*' | '.' | '_' | '^' let string = [^'"' '\\' '\n']* (* For strings of #include *) diff --git a/ParToken.mly b/ParToken.mly index acba7ff97..e30451699 100644 --- a/ParToken.mly +++ b/ParToken.mly @@ -27,8 +27,6 @@ %token ASS (* ":=" *) %token EQUAL (* "=" *) %token COLON (* ":" *) -%token OR (* "||" *) -%token AND (* "&&" *) %token LT (* "<" *) %token LEQ (* "<=" *) %token GT (* ">" *) @@ -44,6 +42,7 @@ (* Keywords *) +%token And (* "and" *) %token Begin (* "begin" *) %token Case (* "case" *) %token Const (* "const" *) @@ -57,6 +56,7 @@ %token Function (* "function" *) %token Type (* "type" *) %token Of (* "of" *) +%token Or (* "or" *) %token Var (* "var" *) %token End (* "end" *) %token Then (* "then" *) diff --git a/Parser.mly b/Parser.mly index 26b60bdda..f9d5b2003 100644 --- a/Parser.mly +++ b/Parser.mly @@ -603,7 +603,7 @@ interactive_expr: expr EOF { $1 } expr: - expr OR conj_expr { + expr Or conj_expr { let start = expr_to_region $1 and stop = expr_to_region $3 in let region = cover start stop @@ -613,7 +613,7 @@ expr: | conj_expr { $1 } conj_expr: - conj_expr AND comp_expr { + conj_expr And comp_expr { let start = expr_to_region $1 and stop = expr_to_region $3 in let region = cover start stop diff --git a/Tests/crowdfunding.ligo b/Tests/crowdfunding.ligo index 1909db398..ff43397b3 100644 --- a/Tests/crowdfunding.ligo +++ b/Tests/crowdfunding.ligo @@ -18,7 +18,8 @@ entrypoint contribute (storage store : store; fail "Deadline passed" else case store.backers[sender] of - None -> //store.backers[sender] := amount + None -> +// store.backers[sender] := Some (amount) patch store.backers with map sender -> amount end | _ -> skip end @@ -33,7 +34,6 @@ entrypoint withdraw (storage store : store; const sender : address) if balance >= store.goal then begin patch store with record funded = True end; -// patch store.funded with True end; // store.funded := True; operations := [Transfer (owner, balance)] end @@ -54,12 +54,12 @@ entrypoint claim (storage store : store; const sender : address) None -> fail "Not a backer" | Some (amount) -> - if balance >= store.goal || store.funded then + if balance >= store.goal or store.funded then fail "Cannot refund" else begin operations := [Transfer (sender, amount)]; -// patch store.backers without key sender; +// store.backers[sender] := None end end end with (store, operations)