ClassDict = Adjacency_List. // ClassDict 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 Common? called common // followed by PartOrToken* called ptl // - Alternation followed by Common? // followed by PartOrToken* called ptl Construction = "=". // Construction is the literal string = Alternation = ":" ClassName ClassName_BL. // Alternation is : ClassName followed by | ClassName* PartOrToken : Part | SyntaxToken. // PartOrToken is one of: // - Part // - SyntaxToken SyntaxToken = String. // SyntaxToken is any string between " Part : Required | Optional. // Part is one of: // - Required // - Optional Required = [ LabelName ] ClassName. // Required is LabelName? followed by ClassName 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.