ClassGraph = Adjacency_List. // ClassGraph is Adjacency* called al Adjacency = ClassName Body ".". // Adjacency is Classname called lhs followed by Body called body Body : Construction | Alternation common [Common] PartOrToken_List. // Body is one of: // - Construction followed by optional-Common called common // - Alternation // optional-Common is one of // - empty // - Common Construction = "=". // Construction is the literal string = Alternation = ":" ClassName ClassName_BL. // Alternation is : ClassName followed by ClassName_BL PartOrToken : Part | SyntaxToken. // PartOrToken is one of: // - Required // - Optional SyntaxToken = String. // SyntaxToken is any string between " Part : Required | Optional. // Part is one of: // - Required // - Optional Required = [ LabelName ] ClassName. // Required is optional-LabelName followed by ClassName // optional-LabelName is one of: // - empty // - LabelName Optional = "[" Required "]". // Optional is [ Required ] Common = "common". // Common is the literal string "common" ClassName = Ident. // ClassName is Ident called n LabelName = "<" Ident ">". // LabelName is < Ident called n > Adjacency_List : NAL | EAL. // Adjacency_List is one of: // - NAL // - EAL EAL = . // EAL is empty. NAL = Adjacency Adjacency_List. // NAL is Adjacency called first followed by Adjacency_List called rest PartOrToken_List : NPTL | EPTL. // see above EPTL = . NPTL = PartOrToken PartOrToken_List. ClassName_BL : NCBL | ECBL. ECBL = . NCBL = "|" ClassName ClassName_BL. Main = String.