1 | | % (c) 2009-2022 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, |
2 | | % Heinrich Heine Universitaet Duesseldorf |
3 | | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) |
4 | | |
5 | | :- module(zenvironment, |
6 | | [lookup_type/3 |
7 | | ,create_subenv/3 |
8 | | ,env_z_defs/2 |
9 | | ,zlookup/2 |
10 | | ,zlookup_schema/4 |
11 | | %,create_scope_typeinfos/2 |
12 | | %,lookup_typeinfo/5 |
13 | | %,all_schemas/2 |
14 | | ,create_initial_zenvironment/2 |
15 | | ]). |
16 | | |
17 | | |
18 | | :- use_module(probsrc(module_information)). |
19 | | :- module_info(group,proz). |
20 | | :- module_info(description,'This module provides predicates to access a type environment for Z specifications.'). |
21 | | |
22 | ? | lookup_type(env(_,Vars),Var,Type) :- member(variable(Var,T),Vars),!,T=Type. |
23 | | lookup_type(env(Up,_),Var,Type) :- lookup_type(Up,Var,Type). |
24 | | |
25 | | %all_schemas(Env,Names) :- env_z_defs(Env,Defs),findall(Name,zlookup_schema2(Defs,Name,[],_),Names). |
26 | | |
27 | ? | zlookup_schema(Env,Name,Params,Expr) :- env_z_defs(Env,Defs),zlookup_schema2(Defs,Name,Params,Expr),!. |
28 | ? | zlookup_schema2(Defs,Name,Params,Expr) :- member(sdef(shead(Name,Params),Expr),Defs). |
29 | ? | zlookup_schema2(Defs,Name,Params,Expr) :- member(defeq(shead(Name,Params),Expr),Defs). |
30 | | zlookup_schema2(Defs,Name,Params,Expr) :- member(eqeq(lhs(Name,Params),Expr),Defs). |
31 | | |
32 | ? | zlookup(Env,Entry) :- env_z_defs(Env,D),member(Entry,D). |
33 | | |
34 | | create_initial_zenvironment(Defs,zdef(Defs)). |
35 | | |
36 | | env_z_defs(zdef(D),D). |
37 | | env_z_defs(env(Up,_),D) :- env_z_defs(Up,D). |
38 | | |
39 | | create_subenv(Env,Vars,env(Env,Vars)). |
40 | | |
41 | | %create_scope_typeinfos(Env,tenv(TI)) :- |
42 | | % Env = env(_,Vars), |
43 | | % findall(tinfo(Name,_Expr,Env,Type), member(variable(Name,Type),Vars), TI). |
44 | | |
45 | | %lookup_typeinfo(tenv(Tenv),Name,Expr,Env,Type) :- |
46 | | % member(tinfo(Name,Expr,Env,Type),Tenv). |