示例#1
0
文件: myMP.cs 项目: pagamov/4sem
        public translMp(myGrammar KCgrammar)
            : base(KCgrammar)
        {
            this.Gamma = new ArrayList();
            this.Z     = new Stack();
            foreach (string v1 in KCgrammar.V)   // магазинные символы
            {
                Gamma.Add(v1);
            }
            foreach (string t1 in KCgrammar.T)
            {
                Gamma.Add(t1);
            }
            Q0 = Q[0].ToString(); // начальное состояние
            Z.Push(KCgrammar.S0); // начальный символ в магазине
            F = new ArrayList();  // пустое множество заключительных состояний
            DeltaQSigmaGamma delta = null;

            foreach (string v1 in KCgrammar.V)
            {            // сопоставление правил с отображениями
                ArrayList q1 = new ArrayList();
                ArrayList z1 = new ArrayList();
                foreach (Prule rule in KCgrammar.Prules)
                {
                    if (rule.leftNoTerm == v1)
                    {
                        Stack     zb = new Stack();
                        ArrayList rr = new ArrayList(rule.rightChain);
                        rr.Reverse();
                        foreach (string s in rr)
                        {
                            zb.Push(s);
                        }
                        z1.Add(zb);
                        q1.Add(Q0);
                    }
                }
                delta = new DeltaQSigmaGamma(Q0, "e", v1, q1, z1);
                DeltaList.Add(delta);
            }
            foreach (string t1 in KCgrammar.T)
            {
                Stack e = new Stack();
                e.Push("e");
                delta = new DeltaQSigmaGamma(Q0, t1, t1, new ArrayList()
                {
                    Q0
                }, new ArrayList()
                {
                    e
                });
                DeltaList.Add(delta);
            }
        }