// ---------------------------------------------------------------------------
// Intermediate Notation
//
// Revision: 11/5/92: allow for components and external library terms
// ---------------------------------------------------------------------------
//
//;; produced by extract-cd 'O-P1'
// P1 : I-P1: cd
// : O-P1: intermediate notation
//;; O-P1=I-P2
Demeter_in = Input.
Input :
Cd_graph
*common*.
Cd_graph = < adjacencies > Nlist(Adjacency)
["*terminal_sets*" Comma_list(Vertex) "."]
.
Adjacency =
< source > Vertex
< ns > Neighbors
["*inherits_from*" Comma_list(Term)]
"." .
Neighbors_wc :
Construct_ns |
Alternat_ns
*common* < construct_ns > List(Any_vertex).
Neighbors :
Neighbors_wc |
Repetit_n
|
Intermediate_ns
*common*.
Intermediate_ns :
Repetit |
Non_repetit *common*
.
Non_repetit : Instantiable | Abstract *common*
List(Int_part).
Instantiable = "instantiable=".
Repetit = "repetition=" Term
[ Non_empty].
Non_empty = "*non_empty*".
Abstract = "abstract=".
Int_part : Required_int_part | Optional_int_part
*common* [StaticSpec] [AccessorSpec] Labeled.
Required_int_part = "*required*".
Optional_int_part = "*optional*".
Construct_ns = "=".
Alternat_ns = ":"
< alternat_ns > Bar_list(Term) [ Common].
Common = "*common*".
Repetit_n = "~" Sandwich(Kernel).
Kernel = [ Term ]
"{" Sandwich(Term) "}".
Any_vertex :
Opt_labeled_term
| Optional_term
| Syntax_vertex
| Inherit_term
*common*.
Vertex = < vertex_name > DemIdent .
Syntax_vertex :
Regular_syntax
| Print_command
*common*.
Regular_syntax = < string > DemString .
Print_command :
Print_indent | Print_unindent | Print_skip | Print_space *common*.
Print_indent = "+" .
Print_unindent = "-" .
Print_skip = "*l" .
Print_space = "*s" .
Opt_labeled_term :
Labeled
| Regular
*common* [StaticSpec] [AccessorSpec] Term.
StaticSpec = "*static*" .
AccessorSpec : ReadOnlyAcc | PrivateAcc *common* .
ReadOnlyAcc = "*read-only*" .
PrivateAcc = "*private*" .
Regular = .
Labeled = "<" < label_name > DemIdent ">" .
Optional_term = "[" Sandwich(Opt_labeled_term) "]".
Inherit_term = "*inherit*" Comma_list(Term).
//;
//; 11/5/92 Update term to contain component and external terms
//;
Term : Normal | CppTerm
*common* Vertex
TermRef
["(" Comma_list(Term) ")" ].
CppTerm = "$" .
Normal = .
TermRef : LocalRef | ModuleRef.
ModuleRef : CompRef | LibRef *common* DemIdent.
LocalRef = .
CompRef = "@".
LibRef = "@@".
List(S) ~ {S}.
Nlist(S) ~ S {S}.
Bar_list(S) ~ S {"|" S}.
Comma_list(S) ~ S {"," S}.
Sandwich(S) =
List(Syntax_vertex) S
List(Syntax_vertex).