From 3f0e1c4b15d9a9489cbe256dd1f11de31da842e3 Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Mon, 23 Dec 2019 18:40:48 +0300 Subject: [PATCH] true/false added --- src/Driver.ml | 3 ++- src/Language.ml | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Driver.ml b/src/Driver.ml index 7586d7150..dc614e56f 100644 --- a/src/Driver.ml +++ b/src/Driver.ml @@ -13,7 +13,8 @@ let parse cmd = "string"; "case"; "of"; "esac"; "when"; "boxed"; "unboxed"; "string"; "sexp"; "array"; - "infix"; "infixl"; "infixr"; "at"; "before"; "after"] + "infix"; "infixl"; "infixr"; "at"; "before"; "after"; + "true"; "false"] in Util.parse (object diff --git a/src/Language.ml b/src/Language.ml index 34a4d4bc3..7e3111d2d 100644 --- a/src/Language.ml +++ b/src/Language.ml @@ -673,6 +673,9 @@ module Expr = n:DECIMAL => {notRef atr} => {ignore atr (Const n)} | s:STRING => {notRef atr} => {ignore atr (String (unquote s))} | c:CHAR => {notRef atr} => {ignore atr (Const (Char.code c))} + + | c:(%"true" {Const 1} | %"false" {Const 0}) => {notRef atr} => {ignore atr c} + | %"infix" s:STRING => {notRef atr} => {ignore atr (Var (infix_name @@ unquote s))} | %"fun" "(" args:!(Util.list0)[ostap (LIDENT)] ")" body:basic[def][infix][Void] => {notRef atr} => {ignore atr (Lambda (args, body))} | "[" es:!(Util.list0)[parse def infix Val] "]" => {notRef atr} => {ignore atr (Array es)} @@ -707,9 +710,9 @@ module Expr = | %"repeat" s:scope[def][infix][Void][parse def] %"until" e:basic[def][infix][Val] => {isVoid atr} => {Repeat (s, e)} | %"return" e:basic[def][infix][Val]? => {isVoid atr} => {Return e} - | %"case" e:parse[def][infix][Val] %"of" bs:!(Util.listBy1)[ostap ("|")][ostap (!(Pattern.parse) -"->" parse[def][infix][atr])] %"esac" + | %"case" e:parse[def][infix][Val] %"of" bs:!(Util.listBy1)[ostap ("|")][ostap (!(Pattern.parse) -"->" scope[def][infix][atr][parse def])] %"esac" {Case (e, bs)} - | %"case" e:parse[def][infix][Val] %"of" bs:(!(Pattern.parse) -"->" parse[def][infix][Void]) => {isVoid atr} => %"esac" + | %"case" e:parse[def][infix][Val] %"of" bs:(!(Pattern.parse) -"->" scope[def][infix][Void][parse def]) => {isVoid atr} => %"esac" {Case (e, [bs])} | -"(" parse[def][infix][atr] -")"