コード例 #1
0
ファイル: Parser.cs プロジェクト: Bummibaer/DebugLog
        internal eRETURN Expect(char c)
        {
            eRETURN rc = eRETURN.OK;

            Trace.Write("Expect " + c + "\t");
            TreeNode tn;

            if ((tn = tree.Find(depth, c)) != null)
            {
                depth++;
                if (tn.Last)
                {
                    depth = 0;
                    rc    = eRETURN.DECODED;
                }
            }
            else
            {
                depth--;
                if (depth < 0)
                {
                    depth = 0;
                }
                rc = eRETURN.ERROR;
            }
            return(rc);
        }
コード例 #2
0
ファイル: UnitTest1.cs プロジェクト: Bummibaer/DebugLog
        public void TestAddChildren()
        {
            Parser p = new Parser(codes);

            String tests = "I22dABAABACEFACDF123I22dAB";

            char[] bTest = tests.ToCharArray();
            for (int i = 0; i < tests.Length; i++)
            {
                eRETURN er = p.Parse(bTest[i]);
                if (i == 1)
                {
                    Assert.AreEqual(er, eRETURN.DECODED);
                }
                Trace.WriteLine(Environment.NewLine + i + "\t" + er.ToString());
            }
        }
コード例 #3
0
ファイル: Parser.cs プロジェクト: Bummibaer/DebugLog
        public eRETURN Parse(char c)
        {
            eRETURN er = Expect(c);

            qChars.Enqueue(c);
            switch (er)
            {
            case eRETURN.DECODED:
                qChars.Clear();
                Trace.WriteLine("Parser successfull !");
                break;

            case eRETURN.ERROR:
                Trace.Write("ERROR !\t");
                qChars.Dequeue();
                while (qChars.Count > 0)
                {
                    Trace.WriteLine("Try again!");
                    Parse(qChars.Dequeue());
                }
                break;

            default:
                switch (sDecode)
                {
                case eDecode.IDLE:
                    if (c == '%')
                    {
                        sDecode = eDecode.TYPE;
                    }
                    break;

                case eDecode.TYPE:
                    type    = c;
                    sDecode = eDecode.LENGTH;
                    break;

                case eDecode.LENGTH:
                    if (!int.TryParse(c.ToString(), out length))
                    {
                        sDecode = eDecode.IDLE;
                        qChars.Clear();
                        Trace.WriteLine("Couldn't decode : " + c);
                    }
                    else
                    {
                        sDecode = eDecode.DECODING;
                        index   = 0;
                    }
                    break;

                case eDecode.DECODING:
                    value[index++] = (byte)c;
                    if (index >= length)
                    {
                        switch (type)
                        {
                        case 'd':
                            BitConverter.ToUInt16(value, 0);
                            break;

                        case 'f':
                            throw new NotImplementedException("Float");
                            break;

                        default:
                            throw new NotImplementedException("Type:" + type);
                            break;
                        }
                        sDecode = eDecode.IDLE;
                    }
                    break;

                default:
                    break;
                }
                break;
            }
            return(er);
        }