private static void ProcessNSRecReferencesAndReset() { // Get the Sequence and Alternate references, find their references in the foreach (KeyValuePair <NSRecRef, NextStateRec> item in s_seqRefBldr) { int seqNo; // HACK: no error checking NSRecRef nsRecRef = item.Key; NextStateRec nsRec = item.Value; Debug.WriteLine($"SeqNo={nsRecRef.SeqNo}, ID={nsRecRef.Identifier}, Hash={nsRecRef.GetHashCode()} ", "NSRecRef"); string objRef = nsRecRef.Sequence; if (!string.IsNullOrEmpty(objRef)) { seqNo = NSRecRef.ExtractReference(ref objRef); NSRecRef nsSeqRef = new NSRecRef(seqNo, objRef); Debug.WriteLine(objRef, "nsSeqRef"); NextStateRec nsSeqRec = s_seqRefBldr[nsSeqRef]; s_nxtStateFuncBldr.AddSequenceNSRecord(nsRec, nsSeqRec); } objRef = nsRecRef.Alternate; if (!string.IsNullOrEmpty(objRef)) { seqNo = NSRecRef.ExtractReference(ref objRef); NSRecRef nsAltRef = new NSRecRef(seqNo, objRef); NextStateRec nsAltRec = s_seqRefBldr[nsAltRef]; s_nxtStateFuncBldr.AddAlternativeNSRecord(nsRec, nsAltRec); } } s_seqRefBldr.Clear(); // clears the list for the next Gramma definition //throw new NotImplementedException(); }
private static NextStateRec ProcessDefLine(string line, out int seqNo, out string seq2Obj, out string alt2Obj) { NextStateRec nsRec, nsDef = null; UnEscapeQuotes(ref line); // extract the lines values as required string[] cols = line.Split(10, ','); string objRef = cols[2]; if (!string.IsNullOrWhiteSpace(objRef)) { if (!Enum.TryParse(cols[5].Trim(), out ParseResponse response)) { throw new FormatException($"Response '{cols[5].Trim()}' not a valid ParseResponse value in: {line}"); } seqNo = NSRecRef.ExtractReference(ref objRef); nsRec = NextStateRec.CreateNSObject(objRef, response); } else // must be a blank line so return nothing { seq2Obj = string.Empty; alt2Obj = string.Empty; seqNo = 0; return(null); } string gramma = cols[0]; // column '1' ignored, is for user reference to the gramma being defined seq2Obj = cols[3].Trim(); alt2Obj = cols[4].Trim(); string action = cols[6].Trim(); // columns 7 onwards ignored and can be used for comments as desired // process a Gramma definition line (1st line in sequence) if existant and return nsDEf/nsRec sequence pair if (!string.IsNullOrWhiteSpace(gramma)) { nsDef = NextStateRec.CreateGrammaDef(gramma.TrimEnd(':')); //NOTE: colon is optional s_nxtStateFuncBldr.AddSequenceNSRecord(nsDef, nsRec); return(nsDef); } // OR: just return the Next State Record else { return(nsRec); } }