Beispiel #1
0
        /// <summary>
        /// creates an XML Tree from this AST to view it with XML Viewer eg XMLSpy
        /// </summary>
        /// <param name="astRoot">ASTTree Root</param>
        /// <returns>XML Tree</returns>
        public static string Tree2XML(ASTElement astRoot, int Depth)
        {
            string XmlTree = "";

            if (astRoot != null)
            {
                for (int i = 0; i < Depth; i++)
                {
                    XmlTree += "\t";
                }
                XmlTree += "<Node ";
                XmlTree += "Token=\"" + astRoot.rlElement.GetToken() + "\" ";
                XmlTree += "Terminal=\"" + (astRoot.rlElement.IsTerminal()?"true":"false") + "\" ";
                XmlTree += "Depth=\"" + Depth + "\"";
                XmlTree += ">\n";

                ASTElement tmpAst = null;
                int        NodeNr = 0;
                do
                {
                    tmpAst   = astRoot.GetNextNode(NodeNr);
                    XmlTree += Tree2XML(tmpAst, Depth + 1);
                    NodeNr++;
                }while(tmpAst != null);



                for (int i = 0; i < Depth; i++)
                {
                    XmlTree += "\t";
                }
                XmlTree += "</Node>\n";
            }
            return(XmlTree);
        }
Beispiel #2
0
        public RuleElement Pop()
        {
            RuleElement re = (RuleElement)m_Stack.Pop();

            m_ActRoot = (ASTElement)m_TreeStack.Pop();
            return(re);
        }
Beispiel #3
0
        /// <summary>
        /// Add a rulelement to the root
        /// </summary>
        /// <param name="re"></param>
        /// <returns>Added ASTElement</returns>
        public ASTElement AddNode(RuleElement re)
        {
            ASTElement next = new ASTElement(re, this);

            m_NodeList.Add(next);
            return(next);
        }
Beispiel #4
0
        public RuleElement Pop2()
        {
            buStackElement elm1 = (buStackElement)m_Stack.Pop();
            buStackElement elm2 = (buStackElement)m_Stack.Pop();

            m_TreeRoot = (ASTElement)m_TreeStack.Pop();
            m_actPopList.Add(m_TreeRoot);

            return(elm2.GetRule);
        }
Beispiel #5
0
        public void PushReduce(RuleElement re, int State)
        {
            m_Stack.Push(new buStackElement(re));
            m_Stack.Push(new buStackElement(State));

            m_TreeRoot = new ASTElement(re, m_actPopList);
            m_TreeStack.Push(m_TreeRoot);

            m_actPopList.Clear();
        }
Beispiel #6
0
        public void PushShift(RuleElement re, int State)
        {
            m_Stack.Push(new buStackElement(re));
            m_Stack.Push(new buStackElement(State));

            ASTElement neuElm = new ASTElement(re);

            m_TreeStack.Push(neuElm);

            m_actPopList.Clear();
        }
Beispiel #7
0
 public TopDownParseStack(RuleStart rs)
 {
     m_Stack     = new MyStack();
     m_TreeStack = new MyStack();
     if (rs != null)
     {
         m_Stack.Push(rs);
         m_TreeRoot = new ASTElement(rs);
         m_ActRoot  = m_TreeRoot;
         m_TreeStack.Push(m_TreeRoot);
     }
 }
Beispiel #8
0
        public void Push(RuleStart Transition)
        {
            MyArrayList TransRules = Rules2Array(Transition);

            for (int i = 0; i < TransRules.Count; i++)
            {
                RuleElement re = (RuleElement)TransRules[TransRules.Count - i - 1];
                m_Stack.Push(re);
                re = (RuleElement)TransRules[i];
                ASTElement astElm = m_ActRoot.AddNode(re);
                m_TreeStack.Push(astElm);
            }
        }
Beispiel #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="re"></param>
 /// <param name="Nodes"></param>
 public ASTElement(RuleElement re, MyArrayList Nodes)
 {
     m_re       = re;
     m_Root     = null;
     m_NodeList = new MyArrayList();
     if (Nodes != null)
     {
         for (int i = 0; i < Nodes.Count; i++)
         {
             m_NodeList.Add(Nodes[i]);
         }
     }
 }
Beispiel #10
0
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="re">RuleElement</param>
 public ASTElement(RuleElement re, ASTElement root)
 {
     m_re   = re;
     m_Root = root;
     if (root != null)
     {
         m_Depth = root.TreeDepth + 1;
     }
     else
     {
         m_Depth = 0;
     }
 }
Beispiel #11
0
        private void TraverseTree(ASTElement Node)
        {
            if (Node != null)
            {
                RuleElement re       = Node.rlElement;
                string      Token    = re.GetToken();
                bool        Terminal = re.IsTerminal();
                ExecuteMethod(Token, Terminal);

                ASTElement tmpAst = null;
                int        NodeNr = 0;
                do
                {
                    tmpAst = Node.GetNextNode(NodeNr);
                    TraverseTree(tmpAst);
                    NodeNr++;
                }while(tmpAst != null);
            }
        }
Beispiel #12
0
        public bool Compile(string FileName)
        {
            TextLoader StrLd = new TextLoader(FileName);
            string     Datas = StrLd.Load();

            if (m_tr.ParsingType == Translate.ParseType.LL1)
            {
                if (m_tdParser.Init())
                {
                    ASTElement astElm  = m_tdParser.Parse(Datas);
                    string     verlauf = m_tdParser.ParseVerlauf;

                    TextLoader StrSv = new TextLoader("parse.txt");
                    StrSv.Save(verlauf);

                    string     RLtree = ASTElement.Tree2XML(astElm, 0);
                    TextLoader StrSv2 = new TextLoader("parsetree.xml");
                    StrSv2.Save(RLtree);

                    m_tr.Convert(astElm);
                }
            }
            else if (m_tr.ParsingType == Translate.ParseType.SLR1 || m_tr.ParsingType == Translate.ParseType.LR1 || m_tr.ParsingType == Translate.ParseType.LALR1)
            {
                if (m_buParser.Init())
                {
                    ASTElement astElm = m_buParser.Parse(Datas);

                    string verlauf = ButtomUpParser.ParseVerlaufArray2String(m_buParser.ParseVerlaufListe);

                    TextLoader StrSv1 = new TextLoader("parse.txt");
                    StrSv1.Save(verlauf);

                    string     RLtree = ASTElement.Tree2XML(astElm, 0);
                    TextLoader StrSv2 = new TextLoader("parsetree.xml");
                    StrSv2.Save(RLtree);
                }
            }

            return(true);
        }
Beispiel #13
0
 public void Convert(ASTElement astElm)
 {
     m_astElm = astElm;
     TraverseTree(m_astElm);
 }
Beispiel #14
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="re">RuleElement</param>
 public ASTElement(RuleElement re)
 {
     m_re    = re;
     m_Root  = null;
     m_Depth = 0;
 }