Skip to content

Commit

Permalink
snapshot
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@321 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
x97davka committed Jul 7, 1998
1 parent a769b70 commit fc82346
Show file tree
Hide file tree
Showing 9 changed files with 684 additions and 208 deletions.
48 changes: 44 additions & 4 deletions modeq/builtin.rml
Expand Up @@ -101,8 +101,25 @@ SCode.CLASS("Boolean",false,Absyn.R_PREDEFINED_BOOL,

(* FIXME: Shuold contain components (attributes) from the real Real type *)
val time_var =
Env.FRAMEVAR("time", Absyn.ATTR([] , false, Absyn.VAR, Absyn.BIDIR),
Types.T_COMPLEX(ClassInf.TYPE_REAL("time"), []), Types.UNBOUND)
Types.VAR("time", Absyn.ATTR([] , false, Absyn.VAR, Absyn.BIDIR),
Types.T_REAL, Types.UNBOUND)

(** - Some assorted function types *)

val nil2real = Types.T_FUNCTION([],
Types.T_REAL)

val real2real = Types.T_FUNCTION([("x",Types.T_REAL)],
Types.T_REAL)

val real_real2real = Types.T_FUNCTION([("x",Types.T_REAL),("y",Types.T_REAL)],
Types.T_REAL)

val bool2bool = Types.T_FUNCTION([("x",Types.T_BOOL)],
Types.T_BOOL)

val real_real2bool = Types.T_FUNCTION([("x",Types.T_REAL),("y",Types.T_REAL)],
Types.T_BOOL)

(** - Initial environment *)

Expand All @@ -118,8 +135,31 @@ relation initial_env =
Env.extend_frame_c(env7, string_type) => env8 &
Env.extend_frame_c(env8, boolean_type) => env9 &
Env.extend_frame_c(env9, boolean_type) => env10 &
Env.extend_frame_v(env10, time_var) => env11

Env.extend_frame_v(env10, time_var) => env11 &

(* non-functions *)
Env.extend_frame_t(env11, "inital", nil2real) => env12 &
Env.extend_frame_t(env12, "terminal", nil2real) => env13 &
Env.extend_frame_t(env13, "event", bool2bool) => env14 &
Env.extend_frame_t(env14, "switch", bool2bool) => env15 &
Env.extend_frame_t(env15, "timeEvent", real_real2bool) => env16 &
Env.extend_frame_t(env16, "der", real2real) => env17 &

(* non-differentiable functions *)
Env.extend_frame_t(env17, "div", real_real2real) => env18 &
Env.extend_frame_t(env18, "rem", real_real2real) => env19 &
Env.extend_frame_t(env19, "ceil", real2real) => env20 &
Env.extend_frame_t(env20, "floor", real2real) => env21 &

(* differentiable functions *)
Env.extend_frame_t(env21, "abs", real2real) => env22 &
Env.extend_frame_t(env22, "sign", real2real) => env23 &

(* Not in the report *)
Env.extend_frame_t(env23, "sin", real2real) => env24 &
Env.extend_frame_t(env24, "cos", real2real) => env25
----------------------------------------------
initial_env () => env11
initial_env () => env25

end
23 changes: 18 additions & 5 deletions modeq/dump.rml
Expand Up @@ -24,6 +24,7 @@ module Dump:
relation dump: Absyn.Program => ()
relation print_exp: Absyn.Exp => ()
relation print_component_ref: Absyn.ComponentRef => ()
relation print_path : Absyn.Path => ()
relation print_subscripts : Absyn.Subscript list => ()
relation print_arraydim: Absyn.ArrayDim => ()
relation print_equation: Absyn.Equation => ()
Expand Down Expand Up @@ -61,7 +62,7 @@ relation print_class: Absyn.Class => () =

rule print_class_restriction(r) & print "(" &
print n & print "," & print_select(p,"PARTIAL,","") &
print ") = " & Absyn.path_string(i) => is & print is &
print ") = " & print_path(i) &
print_class_modification(m)
----------------------------------------
print_class(Absyn.CLASS(n,p,r,Absyn.DERIVED(i,_,m))) => ()
Expand Down Expand Up @@ -174,14 +175,13 @@ relation print_elementspec: Absyn.ElementSpec => () =
print_elementspec(Absyn.CLASSDEF(repl,cl))


rule Absyn.path_string(p) => s &
print "EXTENDS(" & print s & print "," &
rule print "EXTENDS(" & print_path p & print "," &
print_list(l,print_element_arg,",") & print ")"
------------------------------------------
print_elementspec(Absyn.EXTENDS(p,l))

rule print "COMPONENTS(attr... ," &
Absyn.path_string(t) => ts & print ts & print "," &
print_path(t) & print "," &
print_list(cs, print_component, ",") &
print ")"
------------------------------------------
Expand Down Expand Up @@ -358,7 +358,7 @@ relation print_alg_elseif : (Absyn.Exp * Absyn.Algorithm list) => () =

end

(** - Component references *)
(** - Component references and paths *)

(** relation: print_component_ref
**
Expand Down Expand Up @@ -390,6 +390,19 @@ relation print_subscripts : Absyn.Subscript list => () =

end

(** relation: print_component_ref
**
** Print a `Path'.
**)

relation print_path : Absyn.Path => () =

rule Absyn.path_string p => s & print s
----------------------------------
print_path p

end

(** - Expressions *)

(** relation: print_exp
Expand Down
34 changes: 20 additions & 14 deletions modeq/env.rml
Expand Up @@ -17,15 +17,13 @@ module Env:
with "classinf.rml"
with "exp.rml"

type Binding = Types.Binding
type Ident = string

datatype FrameVar = FRAMEVAR of SCode.Ident
* Absyn.VarAttr
* Types.Type
* Binding
datatype Frame = FRAME of (Ident * Item) list

datatype Frame = FRAME of (SCode.Ident*FrameVar) list
* (SCode.Ident*SCode.Class) list
datatype Item = VAR of Types.Var
| CLASS of SCode.Class
| TYPE of Types.Type

type Env = Frame list

Expand All @@ -34,11 +32,12 @@ module Env:

relation open_scope : Env => Env
relation extend_frame_c : (Env, SCode.Class) => Env
relation extend_frame_v : (Env, FrameVar) => Env
relation extend_frame_v : (Env, Types.Var) => Env
relation extend_frame_t : (Env,Ident,Types.Type) => Env

end

val empty_frame = FRAME([],[])
val empty_frame = FRAME([])
val empty_env = []

relation open_scope: Env => Env =
Expand All @@ -49,14 +48,21 @@ end

relation extend_frame_c : (Env, SCode.Class) => Env =

axiom extend_frame_c(FRAME(vs,cs)::fs,c as SCode.CLASS(n,_,_,_))
=> ((FRAME(vs,(n,c)::cs)::fs))
axiom extend_frame_c(FRAME(items)::fs,c as SCode.CLASS(n,_,_,_))
=> ((FRAME((n,CLASS(c))::items)::fs))

end

relation extend_frame_v : (Env,FrameVar) => Env =
relation extend_frame_v : (Env,Types.Var) => Env =

axiom extend_frame_v(FRAME(vs,cs)::fs,v as FRAMEVAR(n,_,_,_))
=> (FRAME((n,v)::vs,cs)::fs)
axiom extend_frame_v(FRAME(items)::fs,v as Types.VAR(n,_,_,_))
=> (FRAME((n,VAR(v))::items)::fs)

end

relation extend_frame_t : (Env,Ident,Types.Type) => Env =

axiom extend_frame_t(FRAME(items)::fs, n, t)
=> (FRAME((n,TYPE(t))::items)::fs)

end

0 comments on commit fc82346

Please sign in to comment.