Skip to content

Commit

Permalink
added existClass, changed getModels and getPackages to getClassNames.
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@886 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed Dec 19, 2002
1 parent 98da3fb commit 94647c9
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 89 deletions.
6 changes: 6 additions & 0 deletions modeq/exp.rml
Expand Up @@ -1067,6 +1067,12 @@ relation print_exp2_str : (Exp,int) => string =
---------------------------------------
print_exp2_str (CAST(REAL,ICONST(ival)),_) => res

rule RTOpts.modelica_output => false &
int_real ival => rval &
real_string rval => res &
string_append("-",res) => res2
---------------------------------------
print_exp2_str (CAST(REAL,UNARY(UMINUS(_),ICONST(ival))),_) => res2

rule RTOpts.modelica_output => false &
print_exp_str e => s &
Expand Down
145 changes: 65 additions & 80 deletions modeq/interactive.rml
Expand Up @@ -551,22 +551,22 @@ relation evaluate_graphical_api: (InteractiveStmts, InteractiveSymbolTable) =>
st as SYMBOLTABLE(p,s,ic,iv,cf)) => (resstr,st)

rule Absyn.cref_to_path(cr) => path &
get_models_in_path(path,p) => s1 &
get_classnames_in_path(path,p) => s1 &
string_append(s1,"\n") => resstr
-----------------------
evaluate_graphical_api(
ISTMTS([IEXP(Absyn.CALL(
Absyn.CREF_IDENT("getModels",_),
Absyn.CREF_IDENT("getClassNames",_),
Absyn.FUNCTIONARGS([Absyn.CREF(cr)],_)))]
),
st as SYMBOLTABLE(p,s,ic,iv,cf)) => (resstr,st)

rule get_top_models(p) => s1 &
rule get_top_classnames(p) => s1 &
string_append(s1,"\n") => resstr
-----------------------
evaluate_graphical_api(
ISTMTS([IEXP(Absyn.CALL(
Absyn.CREF_IDENT("getModels",_),
Absyn.CREF_IDENT("getClassNames",_),
Absyn.FUNCTIONARGS([],_)))]
),
st as SYMBOLTABLE(p,s,ic,iv,cf)) => (resstr,st)
Expand Down Expand Up @@ -650,6 +650,16 @@ relation evaluate_graphical_api: (InteractiveStmts, InteractiveSymbolTable) =>
Absyn.FUNCTIONARGS([Absyn.CREF(cr)],_)))]
),
st as SYMBOLTABLE(p,s,ic,iv,cf)) => (resstr,st)

rule exist_class(cr,p) => s1 &
string_append(s1,"\n") => resstr
-----------------------
evaluate_graphical_api(
ISTMTS([IEXP(Absyn.CALL(
Absyn.CREF_IDENT("existClass",_),
Absyn.FUNCTIONARGS([Absyn.CREF(cr)],_)))]
),
st as SYMBOLTABLE(p,s,ic,iv,cf)) => (resstr,st)
end

relation componentref_to_path: Absyn.ComponentRef => Absyn.Path =
Expand Down Expand Up @@ -788,6 +798,22 @@ relation is_package: (Absyn.ComponentRef, Absyn.Program) => string =
axiom is_package(cr,p) => "false"
end

(** relation: exist_class
** This relation takes a component reference and a program.
** It returns the string "true" if the refrenced class exists in the symbol table, otherwise it returns the
** string "false".
**)
relation exist_class: (Absyn.ComponentRef, Absyn.Program) => string =

rule Absyn.cref_to_path(cr) => path &
get_pathed_class_in_program(path,p) => _
----------------------------
exist_class(cr,p) => "true"

axiom exist_class(cr,p) => "false"
end


relation is_primitive_class: (Absyn.Class,Absyn.Program) => bool =

axiom is_primitive_class(Absyn.CLASS(_,_,_,_,Absyn.R_PREDEFINED_INT,_),_) => true
Expand Down Expand Up @@ -1310,131 +1336,90 @@ relation get_packages_in_elts: (Absyn.ElementItem list) => string list =
get_packages_in_elts (_::rest) => res
end

relation get_models_in_path: (Absyn.Path,Absyn.Program) => string =
relation get_classnames_in_path: (Absyn.Path,Absyn.Program) => string =

rule get_pathed_class_in_program(modelpath,p) => cdef &
get_models_in_class(modelpath,p,cdef) => str &
get_classnames_in_class(modelpath,p,cdef) => str &
string_append("{",str) => s1 &
string_append(s1,"}") => res
----------------------
get_models_in_path (modelpath,p) => res
axiom get_models_in_path(_,_) => "-1"
get_classnames_in_path (modelpath,p) => res
axiom get_classnames_in_path(_,_) => "-1"
end
(** relation: get_top_models

(** relation: get_top_classnames
** This relation takes a Path and a Program and returns a list of the names of the packages found in the Path.
**)
relation get_top_models: (Absyn.Program) => string =
relation get_top_classnames: (Absyn.Program) => string =

rule get_top_models_in_program(p) => strlist &
rule get_top_classnames_in_program(p) => strlist &
(* Print.print_buf "program =" &
Dump.dump p & Print.print_buf "\n" &*)
Util.string_delimit_list(strlist,",") => str &
string_append("{",str) => s1 &
string_append(s1,"}") => res
-------------------------
get_top_models(p) => res
get_top_classnames(p) => res

axiom get_top_models(_) => "-1"
axiom get_top_classnames(_) => "-1"
end

relation get_top_models_in_program: Absyn.Program => string list =
relation get_top_classnames_in_program: Absyn.Program => string list =

axiom get_top_models_in_program Absyn.PROGRAM([],_) => []
axiom get_top_classnames_in_program Absyn.PROGRAM([],_) => []

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res &
Print.print_buf "R_CLASS succeded\n"
-----------------------------------------
get_top_models_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,Absyn.R_CLASS,_)::rest,w)) => id::res

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res
& Print.print_buf "R_MODEL succeded\n"
-----------------------------------------
get_top_models_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,Absyn.R_MODEL,_)::rest,w)) => id::res

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res
& Print.print_buf "R_CONNECTOR succeded\n"
-----------------------------------------
get_top_models_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,Absyn.R_CONNECTOR,_)::rest,w)) => id::res

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res
& Print.print_buf "R_BLOCK succeded\n"
-----------------------------------------
get_top_models_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,Absyn.R_BLOCK,_)::rest,w)) => id::res

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res
& Print.print_buf "R_RECORD succeded\n"
rule get_top_classnames_in_program (Absyn.PROGRAM(rest,w)) => res
-----------------------------------------
get_top_models_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,Absyn.R_RECORD,_)::rest,w)) => id::res
get_top_classnames_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,_,_)::rest,w)) => id::res

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res
& Print.print_buf "R_FUNCTION succeded\n"
-----------------------------------------
get_top_models_in_program (Absyn.PROGRAM(Absyn.CLASS(id,_,_,_,Absyn.R_FUNCTION,_)::rest,w)) => id::res

rule get_top_models_in_program (Absyn.PROGRAM(rest,w)) => res
rule get_top_classnames_in_program (Absyn.PROGRAM(rest,w)) => res
------------------------------------------
get_top_models_in_program (Absyn.PROGRAM(_::rest,w)) => res
get_top_classnames_in_program (Absyn.PROGRAM(_::rest,w)) => res
end

(** relation: get_models_in_class
(** relation: get_classnames_in_class
** This relation takes a `Class' definition and a Path identifying th elcass.
** It returns a string containing comma separated package names found
** in the class definition.
**)
relation get_models_in_class:(Absyn.Path, Absyn.Program, Absyn.Class) => string =
relation get_classnames_in_class:(Absyn.Path, Absyn.Program, Absyn.Class) => string =

rule get_models_in_parts(parts) => strlist &
rule get_classnames_in_parts(parts) => strlist &
Util.string_delimit_list(strlist,",") => res
-------------------------------------
get_models_in_class(_,_,Absyn.CLASS(_,_,_,_,_,Absyn.PARTS(parts,_))) => res
get_classnames_in_class(_,_,Absyn.CLASS(_,_,_,_,_,Absyn.PARTS(parts,_))) => res

rule lookup_classdef(path,inmodel,p) => (cdef,newpath) &
get_models_in_class(newpath,p,cdef) => res
get_classnames_in_class(newpath,p,cdef) => res
--------------------------------------------
get_models_in_class(inmodel,p,Absyn.CLASS(_,_,_,_,_,Absyn.DERIVED(path,_,_,_))) => res
get_classnames_in_class(inmodel,p,Absyn.CLASS(_,_,_,_,_,Absyn.DERIVED(path,_,_,_))) => res
end


relation get_models_in_parts:(Absyn.ClassPart list ) => string list =
relation get_classnames_in_parts:(Absyn.ClassPart list ) => string list =

axiom get_models_in_parts [] => []
axiom get_classnames_in_parts [] => []

rule get_models_in_elts(elts) => l1 &
get_models_in_parts(rest) => l2 &
rule get_classnames_in_elts(elts) => l1 &
get_classnames_in_parts(rest) => l2 &
list_append(l1,l2) => res
-------------------------
get_models_in_parts(Absyn.PUBLIC(elts)::rest) => res
get_classnames_in_parts(Absyn.PUBLIC(elts)::rest) => res

rule get_models_in_parts(rest) => res
rule get_classnames_in_parts(rest) => res
-----------------------------------
get_models_in_parts(_::rest) => res
get_classnames_in_parts(_::rest) => res
end

relation get_models_in_elts: (Absyn.ElementItem list) => string list =
axiom get_models_in_elts [] => []
relation get_classnames_in_elts: (Absyn.ElementItem list) => string list =
axiom get_classnames_in_elts [] => []

rule get_models_in_elts(rest) => res
--------------------------------
get_models_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,Absyn.R_CLASS,_)),NONE))::rest) => id::res
rule get_models_in_elts(rest) => res
--------------------------------
get_models_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,Absyn.R_MODEL,_)),NONE))::rest) => id::res
rule get_models_in_elts(rest) => res
--------------------------------
get_models_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,Absyn.R_RECORD,_)),NONE))::rest) => id::res
rule get_models_in_elts(rest) => res
--------------------------------
get_models_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,Absyn.R_BLOCK,_)),_))::rest) => id::res
rule get_models_in_elts(rest) => res
--------------------------------
get_models_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,Absyn.R_CONNECTOR,_)),NONE))::rest) => id::res

rule get_models_in_elts(rest) => res
rule get_classnames_in_elts(rest) => res
--------------------------------
get_models_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,Absyn.R_FUNCTION,_)),NONE))::rest) => id::res
rule get_models_in_elts(rest) => res
get_classnames_in_elts ( Absyn.ELEMENTITEM(Absyn.ELEMENT(_,_,_,_,Absyn.CLASSDEF(_,Absyn.CLASS(id,_,_,_,_,_)),NONE))::rest) => id::res
rule get_classnames_in_elts(rest) => res
--------------------------------
get_models_in_elts (_::rest) => res
get_classnames_in_elts (_::rest) => res
end

(* This relation gets all base classes of a class, NOT Recursive.*)
Expand Down
11 changes: 2 additions & 9 deletions modeq/interactive_api.txt
Expand Up @@ -160,18 +160,11 @@ getPackages(<cref>) Returns the names of all Packages in class
named by A0 as a list,
e.g. getPackages(Modelica) =>
{Electrical,Blocks,Mechanics,Constants,Math,SIunits}
getPackages() Returns the names of all
Packages reachable from
MODELICAPATH. (global scope)

getModels(<cref>) Returns the names of all model
getClassNames(<cref>) Returns the names of all class
defintions in a class
(package),
e.g.
getModels(Modelica.Electrical.Analog.Sensors)
=>
{PotentialSensor,VoltageSensor,CurrentSensor}
getModels() Returns the names of all model
getClassNames() Returns the names of all class
definitions in the global scope.

isType(<cref>) Returns true if class is a type, otherwise false.
Expand Down

0 comments on commit 94647c9

Please sign in to comment.