X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/42198578566be256bbdebf22757f41edef4aa6ee..63920aa5296a85edd9d734a65be22d9911358df2:/src/ast.sml diff --git a/src/ast.sml b/src/ast.sml index 3fdc22f..91bca42 100644 --- a/src/ast.sml +++ b/src/ast.sml @@ -23,18 +23,18 @@ structure Ast = struct open DataStructures (* A description of a predicate on configuration block stacks *) -datatype context' = +datatype pred' = CRoot (* The stack is empty. *) | CConst of string - (* The given context name is on top of the stack. *) - | CPrefix of context - (* Some prefix of the stack matches the context. *) - | CNot of context - (* The context does not match. *) - | CAnd of context * context - (* Both contexts match. *) -withtype context = context' * position + (* The given pred name is on top of the stack. *) + | CPrefix of pred + (* Some prefix of the stack matches the pred. *) + | CNot of pred + (* The pred does not match. *) + | CAnd of pred * pred + (* Both preds match. *) +withtype pred = pred' * position datatype typ' = TBase of string @@ -43,9 +43,9 @@ datatype typ' = (* SML 'a list *) | TArrow of typ * typ (* SML -> *) - | TAction of context * record * record + | TAction of pred * record * record (* An action that: - * - Is valid in the given context + * - Is valid in the given pred * - Expects an environment compatible with the first record * - Modifies it according to the second record *) withtype typ = typ' * position @@ -61,11 +61,15 @@ datatype exp' = | ELam of string * typ * exp (* Function abstraction *) + | EVar of string + (* Variable bound by a function *) | EApp of exp * exp (* Function application *) | ESet of string * exp (* Set an environment variable *) + | EGet of string * string * exp + (* Get an environment variable *) | ESeq of exp list (* Monad sequencer; execute a number of commands in order *) | ELocal of exp