// Copyright (C) 1991 Northeastern University.
// Permission is granted to any individual or institution to use, copy, modify,
// and distribute this class dictionary, provided that this complete copyright
// and permission notice is maintained, intact, in all copies and supporting
// documentation.
// intermediate notation: used for programming language code generation
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 :
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* Labeled.
Required_int_part = "*required*".
Optional_int_part = "*optional*".
Vertex = < vertex_name > DemIdent .
Labeled = "<" < label_name > DemIdent ">" .
Term :
Normal
*common* Vertex.
Normal = .
List(S) ~ {S}.
Nlist(S) ~ S {S}.
Comma_list(S) ~ S {"," S}.