Skip to content

Commit f74ebb2

Browse files
author
Peter Aronsson
committed
allmost added getNthComponentAnnotation, migrating to laptop
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@794 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 09d8e0c commit f74ebb2

File tree

8 files changed

+768
-408
lines changed

8 files changed

+768
-408
lines changed

modeq/absyn.rml

Lines changed: 12 additions & 401 deletions
Large diffs are not rendered by default.

modeq/dae.rml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ module DAE:
9393
relation is_comp: Element => ()
9494
relation find_element: (Element list, Element => ()) => Element option
9595
relation build_gr_strlist : ('a list, 'a => string, int) => (string list, 'a list)
96+
relation get_variable_bindings_str: Element list => string
9697
end
9798

9899

@@ -1098,3 +1099,59 @@ relation build_gr_element : Element => Graphviz.Node =
10981099

10991100

11001101
end
1102+
1103+
(** relation: get_variable_bindings_str
1104+
** This relation takes a `DAE.Element' list and returns a comma separated string of variable bindings.
1105+
** E.g. model A Real x=1; Real y=2; end A; => "x=1,y=2"
1106+
**)
1107+
relation get_variable_bindings_str: Element list => string =
1108+
1109+
rule get_variable_list elts => varlst &
1110+
get_bindings_str varlst => str
1111+
------------------------------
1112+
get_variable_bindings_str elts => str
1113+
end
1114+
1115+
relation get_variable_list: Element list => Element list =
1116+
1117+
rule get_variable_list lst => res
1118+
-------------------------------------
1119+
get_variable_list VAR(a,b,c,d,e,f)::lst => (VAR(a,b,c,d,e,f)::res)
1120+
1121+
rule get_variable_list lst => res
1122+
----------------------------
1123+
get_variable_list _::lst => res
1124+
1125+
axiom get_variable_list [] => []
1126+
end
1127+
1128+
relation get_bindings_str: Element list => string =
1129+
1130+
rule Exp.cref_str cr => elstr &
1131+
Exp.print_exp_str e => expstr &
1132+
string_append(elstr,"=") => s1 &
1133+
string_append(s1,expstr) => s2 &
1134+
string_append(s2,",") => s3 &
1135+
get_bindings_str(lst) => s4 &
1136+
string_append(s3,s4) => str
1137+
-----------------
1138+
get_bindings_str((v as VAR(cr,_,_,_,SOME(e),_))::(lst as _::_)) => str
1139+
1140+
rule Exp.cref_str cr => elstr &
1141+
string_append(elstr,",") => s1 &
1142+
get_bindings_str(lst) => s2 &
1143+
string_append(s1,s2) => str
1144+
-----------------
1145+
get_bindings_str((v as VAR(cr,_,_,_,NONE,_))::(lst as _::_)) => str
1146+
1147+
rule Exp.cref_str cr => elstr &
1148+
Exp.print_exp_str e => expstr &
1149+
string_append(elstr,"=") => s1 &
1150+
string_append(s1,expstr) => str
1151+
-----------------
1152+
get_bindings_str([v as VAR(cr,_,_,_,SOME(e),_)]) => str
1153+
1154+
rule Exp.cref_str cr => str
1155+
-----------------------------------------------
1156+
get_bindings_str([v as VAR(cr,_,_,_,NONE,_)]) => str
1157+
end

modeq/env.rml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ module Env:
5757
relation extend_frame_v : (Env, Types.Var) => Env
5858
relation extend_frame_t : (Env,Ident,Types.Type) => Env
5959

60+
6061
relation print_env : Env => ()
6162

6263
relation print_env_graphviz : (Env * string) => ()

modeq/exp.rml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ module Exp:
131131
relation print_subscript: Subscript => ()
132132
relation print_list : ('a list, 'a => (), string) => ()
133133
relation cref_equal : (ComponentRef, ComponentRef) => bool
134-
134+
relation cref_str : ComponentRef => string
135135
relation print_list_str : ('a list, 'a => string, string) => string
136136
relation print_exp_str : Exp => string
137137

@@ -140,6 +140,21 @@ end
140140
with "rtopts.rml"
141141
with "util.rml"
142142

143+
(** relation: path_string
144+
**
145+
** This relation simply converts a `Path' to a `string'.
146+
**)
147+
148+
relation cref_str: ComponentRef => string =
149+
150+
axiom cref_str(CREF_IDENT(s,_)) => s
151+
152+
rule cref_str(n) => ns &
153+
string_append(s,".") => s1 &
154+
string_append(s1,ns) => ss
155+
-------------------------------------
156+
cref_str(CREF_QUAL(s,_,n)) => ss
157+
end
143158

144159
relation is_range : Exp => bool =
145160

modeq/inst.rml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ module Inst:
5252

5353
relation instantiate_class : (SCode.Program,SCode.Path) => DAE.DAElist
5454

55+
relation make_env_from_program: (SCode.Program,SCode.Path) => Env.Env
56+
5557
relation inst_class: (Env.Env, Mod.Mod, Prefix.Prefix,
5658
Connect.Sets, SCode.Class, InstDims)
5759
=> (DAE.Element list, Connect.Sets, Types.Type, ClassInf.State)
@@ -203,6 +205,24 @@ relation inst_class_decls:(Env, SCode.Program, SCode.Path) => ( Env.Env, DAE.Ele
203205
axiom inst_class_decls(env,[],_) => (env,[])
204206
end
205207

208+
(** relation: make_env_from_program
209+
** This relation takes a `SCode.Program' and builds an environment, excluding the class in A1.
210+
**)
211+
212+
relation make_env_from_program: (SCode.Program,SCode.Path) => Env.Env =
213+
rule Builtin.initial_env => env &
214+
add_program_to_env(env,prog,c) => env'
215+
--------------------------------
216+
make_env_from_program (prog,c) => env'
217+
end
218+
219+
relation add_program_to_env: (Env.Env,SCode.Program,SCode.Path) => Env.Env =
220+
rule inst_class_decls(env,p,path) => (env' ,_)
221+
-----------------------------------------
222+
add_program_to_env (env,p,path) => env'
223+
end
224+
225+
206226
(** relation: inst_program
207227
**
208228
** Instantiating a Modelica program is the same as instantiating the

0 commit comments

Comments
 (0)