/// <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); }
public RuleElement Pop() { RuleElement re = (RuleElement)m_Stack.Pop(); m_ActRoot = (ASTElement)m_TreeStack.Pop(); return(re); }
/// <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); }
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); }
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(); }
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(); }
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); } }
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); } }
/// <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]); } } }
/// <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; } }
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); } }
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); }
public void Convert(ASTElement astElm) { m_astElm = astElm; TraverseTree(m_astElm); }
/// <summary> /// /// </summary> /// <param name="re">RuleElement</param> public ASTElement(RuleElement re) { m_re = re; m_Root = null; m_Depth = 0; }