コード例 #1
0
        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();
        }
コード例 #2
0
        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);
            }
        }