Demeter_in = Input.
Input :
Cd_graph
*common*.
Cd_graph = < adjacencies > Nlist(Adjacency)
["*terminal_sets*" Comma_list(Vertex) "."]
.
Adjacency =
< source > Vertex
< ns > Neighbors
"." .
Neighbors :
Neighbors_wc |
Repetit_n
*common*.
Neighbors_wc :
Construct_ns |
Alternat_ns
*common* < construct_ns > List(Any_vertex).
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* Term.
Regular = .
Labeled = "<" < label_name > DemIdent ">" .
Inherit_term = "*inherit*" Comma_list(Term).
Term :
Normal
*common* Vertex
.
Normal = .
Optional_term = "[" Sandwich(Opt_labeled_term) "]".
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)
.
Obj_graph = Comma_list(Object).
Object = Vertex Obj_description.
Obj_description : DNone | DTerminal | DConstruction | DRepetition.
DNone = .
DTerminal = DemString.
DConstruction = "(" List(Labeled_part) ")".
DRepetition = "{" [ Comma_list(Object) ] "}".
Labeled_part =