Skip to content

Commit

Permalink
Moved lookup relations
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@240 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
x97davka committed Apr 2, 1998
1 parent 952fb67 commit 1b314f8
Showing 1 changed file with 0 additions and 152 deletions.
152 changes: 0 additions & 152 deletions modeq/env.rml
Expand Up @@ -31,10 +31,6 @@ module Env:
relation new_frame : Env => Env
relation extend_frame_c : (Env, Explode.Class, Mod.Mod) => Env
relation extend_frame_v : (Env, FrameVar) => Env
relation lookup_class : (Env, Exp.Path) => (Explode.Class, Mod.Mod)
relation lookup_var : (Env,Explode.ComponentRef)
=> (Types.VarAttr,Types.Type,Exp.Exp option)
relation lookup_var_local : (Env, Explode.Ident) => FrameVar

end

Expand All @@ -47,154 +43,6 @@ relation new_frame: Env => Env =

end

(**********************************************************************
*
* Lookup functions
*
* These relations look up class and variable names in the environment.
* The names are supplied as a path, and if the path is qualified, a
* variable named as the first part of the path is searched for, and the
* nave is looked for in it.
*
**********************************************************************)

relation lookup_class_in_package : (Env, Exp.Path)
=> (Explode.Class, Mod.Mod) =

rule Exp.path_string path => ps &
print "- While looking up " & print ps & print "\n" &
print "- Package lookup not implemented\n"
--------------------------------------------
lookup_class_in_package(env, path) => fail

end

relation lookup_class_in_frame: ((Explode.Ident * Explode.Class *
Mod.Mod) list,
Explode.Ident)
=> (Explode.Class,Mod.Mod) =

rule (* print " lookup_class_in_frame(" & print id & print "): " &
print n & print "\n" & *)
id = n
---------------------------------------------------------
lookup_class_in_frame((n,c,m)::_, id) => (c,m)

rule lookup_class_in_frame(fs,id) => (c,m)
------------------------------
lookup_class_in_frame(_::fs,id) => (c,m)

end

relation lookup_class_in_env: (Env,Exp.Path) => (Explode.Class,Mod.Mod) =

rule lookup_class_in_frame(cs,id) => (c,m)
---------------------
lookup_class_in_env(FRAME(_,cs)::fs,Exp.IDENT(id)) => (c,m)

rule lookup_class_in_env(fs,id) => (c,m)
---------------------
lookup_class_in_env(f::fs,id) => (c,m)

end

relation lookup_class: (Env,Exp.Path) => (Explode.Class,Mod.Mod) =

rule lookup_class_in_env(env,path) => (c,m)
--------------------------------------
lookup_class(env, path) => (c,m)

rule lookup_class_in_package(env,path) => (c,m)
--------------------------------------
lookup_class(env, path as Exp.QUALIFIED(_,_)) => (c,m)

end

relation lookup_var2: ((Explode.Ident * FrameVar) list,Explode.Ident)
=> FrameVar =

rule id = n
--------------------------------------------
lookup_var2((n,fv)::_,id) => fv

rule lookup_var2(fs,id) => fv
------------------------
lookup_var2(_::fs,id) => fv

end

relation check_subscripts : (Types.ArrayDim, Exp.Subscript list) => () =

(* FIXME: Check range too? *)
axiom check_subscripts(Types.NODIM, [])
axiom check_subscripts(Types.ONEDIM(_), [_])
axiom check_subscripts(Types.TWODIM(_,_), [_,_])

end

relation lookup_in_var: (Types.Type, Explode.ComponentRef)
=> (Types.VarAttr,Types.Type) =

(* FIXME: Check protected flag *)

(* FIXME: Should I really strip the ArrayDim? *)
rule Types.lookup_component(ty, id)
=> ((_,Types.ATTR(ad,fl,vt,di),ty')) &
check_subscripts(ad, ss)
------------------------
lookup_in_var(ty, [(id,ss)])
=> (Types.ATTR(Types.NODIM,fl,vt,di),ty')

rule Types.lookup_component(ty, id)
=> ((_,Types.ATTR(ad,fl,vt,di),ty')) &
check_subscripts(ad, ss) &
lookup_in_var(ty', vs) => (attr, ty'')
--------------------------------------
lookup_in_var(ty, (id,ss)::vs) => (attr,ty'')

end

relation lookup_var_f : ((Explode.Ident * FrameVar) list, Explode.ComponentRef)
=> (Types.VarAttr, Types.Type, Exp.Exp option) =

rule (* print " lookup_var_f 1: " & print id & print "\n" & *)
lookup_var2(f, id) => FRAMEVAR(n,Types.ATTR(ad,f,vt,di),ty,ass) &
check_subscripts(ad,ss)
----------------------------------
lookup_var_f(f,[(id,ss)]) => (Types.ATTR(Types.NODIM,f,vt,di),ty,ass)

rule (* print " lookup_var_f 2: " & print id & print "\n" & *)
lookup_var2(f, id) => FRAMEVAR(n,Types.ATTR(ad,_,_,_),ty,ass) &
check_subscripts(ad,ss) &
lookup_in_var(ty, ids) => (attr,ty)
----------------------------------
lookup_var_f(f,(id,ss)::ids) => (attr,ty,ass)

end

relation lookup_var: (Env,Explode.ComponentRef)
=> (Types.VarAttr, Types.Type, Exp.Exp option) =

rule (* print " lookup_var: looking in frame\n" & *)
lookup_var_f(vs,ref) => (attr,ty,ass)
-------------------------
lookup_var(FRAME(vs,_)::fs,ref) => (attr,ty,ass)

rule (* print " lookup_var: next frame\n" & *)
lookup_var(fs,ref) => (attr,ty,ass)
--------------------
lookup_var(_::fs,ref) => (attr,ty,ass)

end

relation lookup_var_local : (Env, Explode.Ident) => FrameVar =

rule lookup_var2(vs, id) => fv
-------------------------
lookup_var_local(FRAME(vs,_)::_, id) => fv

end

relation extend_frame_c : (Env, Explode.Class, Mod.Mod) => Env =

axiom extend_frame_c(FRAME(vs,cs)::fs,c as Explode.CLASS(n,_,_,_),m)
Expand Down

0 comments on commit 1b314f8

Please sign in to comment.