Demeter_in = Input.
Input :
Cd_graph
*common*.
Ll1SetElement = [ DemString] [ TEpsilon]
[ TClassTerminal]
[ TEndOfFile].
Cd_graphs = List(Cd_graph).
Cd_graph = < adjacencies > Nlist(Adjacency)
[ "*dfs_n*" DemNumber ]
[ "*current_component*" DemNumber ]
[ "*stack*" List(Adjacency) "." ]
[ "*pools*" List(Vertices_With_Same_Fset) "." ]
["*terminal_sets*" Comma_list(Vertex) "."]
["*foreign*" Comma_list(Term) "."]
.
Vertices_With_Same_Fset = "*pool*" List(Vertex).
Adjacency =
< source > Vertex
["(" < parameters> Comma_list(Vertex) ")"]
< ns > Neighbors
["*treated*" DemNumber]
["*imm_ancester*" Vertex ]
["*inherited_Any_vertex*" List(Any_vertex) ]
["*expanded_common_parts*" List(Common_parts) ]
["*associated*" List(Adjacency) "." ]
[ "*dfs*" DemNumber ]
[ "*high*" DemNumber ]
[ "*scc*" DemNumber ]
[ "( firstset" Comma_list(Ll1SetElement) ")"]
[ "( followset" Comma_list(Ll1SetElement) ")"]
"." .
Common_parts = "*common parts*" Adjacency "*is*"
List(Any_vertex).
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]
["*emptycommon*" DemNumber].
Common = "*common*".
Repetit_n = "~" Sandwich(Kernel).
Kernel = [ Term ]
"{" Sandwich(Term) "}".
Any_vertex :
Opt_labeled_term
| Optional_term
| Syntax_vertex
| Inherit_term
*common* [ "*origin*" Adjacency "." ].
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 ">" .
Inherit_term = "*inherit*" Comma_list(Term).
Term : Normal | CppTerm
*common* Vertex
TermRef
["*adjacency*" Adjacency "." ]
["(" Comma_list(Term) ")" ]
[ "(firstset" Comma_list(Ll1SetElement) ")"]
[ "(followset" Comma_list(Ll1SetElement) ")"] .
CppTerm = "$" .
Normal = .
TermRef : LocalRef | ModuleRef.
ModuleRef : CompRef | LibRef *common* DemIdent.
LocalRef = .
CompRef = "@".
LibRef = "@@".
Optional_term = "[" Sandwich(Opt_labeled_term) "]".
TEpsilon = "*epsilon*" .
TEndOfFile = "*eof*" .
TClassTerminal = "*classterminal*" DemIdent .
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)
[ "( firstset" Comma_list(Ll1SetElement) ")"]
[ "( followset" Comma_list(Ll1SetElement) ")"]
.