Skip to content

Commit

Permalink
Added inner/outer to absyn
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@775 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed Apr 16, 2002
1 parent 66f9f7e commit ea5743e
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 11 deletions.
5 changes: 4 additions & 1 deletion modeq/absyn.rml
Expand Up @@ -76,6 +76,7 @@ module Absyn:

(** - Elements *)
datatype Element = ELEMENT of bool (* final *)
* InnerOuter (* inner/outer *)
* Ident
* ElementSpec

Expand All @@ -86,7 +87,9 @@ module Absyn:
| COMPONENTS of ElementAttributes (*1.1 contains Araydim also.*)
* Path (* type name *)
* Component list

(** One of the keyword inner and outer CAN be given to reference an inner or
outer component. Thus there are three disjoint possibilities. **)
datatype InnerOuter = INNER | OUTER | UNSPECIFIED

datatype Import = NAMED_IMPORT of Ident * Path
| QUAL_IMPORT of Path
Expand Down
23 changes: 16 additions & 7 deletions modeq/absyn_builder/walker.g
Expand Up @@ -267,23 +267,32 @@ element returns [void* ast]
void* class_def = 0;
void* e_spec = 0;
void* final = 0;
void* innerouter = 0;
}
:
( e_spec = import_clause
{
ast = Absyn__ELEMENT(RML_FALSE,mk_scon("import"),e_spec);
ast = Absyn__ELEMENT(RML_FALSE,Absyn__UNSPECIFIED,mk_scon("import"),e_spec);
}
| e_spec = extends_clause
{
ast = Absyn__ELEMENT(RML_FALSE,mk_scon("extends"),e_spec);
ast = Absyn__ELEMENT(RML_FALSE,Absyn__UNSPECIFIED,mk_scon("extends"),e_spec);
}
| #(DECLARATION
( // TODO: fix Absyn to handle inner, outer
(f:FINAL)? { final = f!=NULL?RML_TRUE:RML_FALSE; }
(i:INNER | o:OUTER)?
(i:INNER | o:OUTER)? {
if (i!=NULL) {
innerouter = Absyn__INNER;
} else if (o != NULL) {
innerouter = Absyn__OUTER;
} else {
innerouter = Absyn__UNSPECIFIED;
}
}
(e_spec = component_clause
{
ast = Absyn__ELEMENT(final,
ast = Absyn__ELEMENT(final,innerouter,
mk_scon("component"),e_spec);
}
| r:REPLACEABLE
Expand All @@ -292,7 +301,7 @@ element returns [void* ast]
e_spec = component_clause
(constraining_clause)?
{
ast = Absyn__ELEMENT(final,
ast = Absyn__ELEMENT(final,Absyn__UNSPECIFIED,
mk_scon("replaceable_component"),e_spec);
}
)
Expand All @@ -308,7 +317,7 @@ element returns [void* ast]
{
ast = Absyn__CLASSDEF(RML_PRIM_MKBOOL(1),
class_def);
ast = Absyn__ELEMENT(final,mk_scon("??"),ast);
ast = Absyn__ELEMENT(final,Absyn__UNSPECIFIED,mk_scon("??"),ast);

}
|
Expand All @@ -320,7 +329,7 @@ element returns [void* ast]
{
ast = Absyn__CLASSDEF(RML_PRIM_MKBOOL(1),
class_def);
ast = Absyn__ELEMENT(final,mk_scon("??"),ast);
ast = Absyn__ELEMENT(final,Absyn__UNSPECIFIED,mk_scon("??"),ast);
}
)
)
Expand Down
17 changes: 16 additions & 1 deletion modeq/dump.rml
Expand Up @@ -195,12 +195,27 @@ end
relation print_element: Absyn.Element => () =

rule print "ELEMENT(" & print_select(final,"FINAL,","") &
print_innerouter inout &
print ", " &
print_elementspec spec & print ")"
----------------
print_element (Absyn.ELEMENT(final,_,spec))
print_element (Absyn.ELEMENT(final,inout,_,spec))

end

relation print_innerouter: Absyn.InnerOuter => () =
rule print "INNER"
----------------------------
print_innerouter(Absyn.INNER)

rule print "OUTER"
----------------------------
print_innerouter(Absyn.OUTER)

rule print " "
----------------------------------
print_innerouter(Absyn.UNSPECIFIED)
end
(**)

relation print_elementspec: Absyn.ElementSpec => () =
Expand Down
2 changes: 1 addition & 1 deletion modeq/dumpgraphviz.rml
Expand Up @@ -198,7 +198,7 @@ relation print_element: Absyn.Element => Node =
print_elementspec spec => elsp
(* & print "> End of rule print_element\n" *)
------------------
print_element (Absyn.ELEMENT(final,_,spec)) => Graphviz.NODE("ELEMENT",[fa],[elsp])
print_element (Absyn.ELEMENT(final,_,_,spec)) => Graphviz.NODE("ELEMENT",[fa],[elsp])

end

Expand Down
2 changes: 1 addition & 1 deletion modeq/explode.rml
Expand Up @@ -336,7 +336,7 @@ relation elab_element : (Absyn.Element, bool) => Element list =

rule elab_elementspec(f,prot,s) => es
--------------------------------
elab_element(Absyn.ELEMENT(f,_,s), prot) => es
elab_element(Absyn.ELEMENT(f,_,_,s), prot) => es

end

Expand Down

0 comments on commit ea5743e

Please sign in to comment.