public DFAEdge CharEdge(DFAState State, char input_char) { List <DFAEdge> EdgeList = State.getEdgeList(); int EdgeCount = State.getEdgeCount(); int EdgeIndex = -1; int CharsetIndex = -1; for (int i = 0; i < EdgeCount; i++) { CharsetIndex = EdgeList[i].getCharSetIndex(); foreach (char element in CharSet[CharsetIndex].getCharUnicodeIndexList()) { if (input_char == element) { EdgeIndex = i; break; } } if (EdgeIndex != -1) { break; } } if (EdgeIndex == -1) { return(null); } return(EdgeList[EdgeIndex]); }
public string getAcceptIndex(DFAState State) { int AcceptIndex = State.getAcceptSymbolIndex(); if (AcceptIndex == -1) { return(null); } return(SymbolTable[AcceptIndex].getSymbolName()); }
//Method to parse the DFATable public void parseDFATable() { XmlDocument doc = new XmlDocument(); doc.Load(path); //Enter the tables. XmlNode table = doc.SelectSingleNode("Tables"); //Enter the DFATalbe XmlNode dfaTable = table.SelectSingleNode("DFATable"); List <DFAState> DFAStateList = new List <DFAState>(); List <DFAEdge> DFAEdgeList = new List <DFAEdge>(); DFAState state; DFAEdge edge; XmlNode node = dfaTable.FirstChild; int index = 0; int initialState = Convert.ToInt32(dfaTable.Attributes["InitialState"].InnerText); int edgeCount = 0; int acceptSymbol = 0; int charSetIndex = 0; int target = 0; XmlNode nodeChild = null; while (node != null) { index = Convert.ToInt32(node.Attributes["Index"].InnerText); edgeCount = Convert.ToInt32(node.Attributes["EdgeCount"].InnerText); acceptSymbol = Convert.ToInt32(node.Attributes["AcceptSymbol"].InnerText); if (node.HasChildNodes) { nodeChild = node.FirstChild; while (nodeChild != null) { charSetIndex = Convert.ToInt32(nodeChild.Attributes["CharSetIndex"].InnerText); target = Convert.ToInt32(nodeChild.Attributes["Target"].InnerText); edge = new DFAEdge(charSetIndex, target); DFAEdgeList.Add(edge); nodeChild = nodeChild.NextSibling; } } state = new DFAState(index, edgeCount, acceptSymbol, DFAEdgeList); DFAStateList.Add(state); DFAEdgeList = new List <DFAEdge>(); node = node.NextSibling; } GPBTables.setDFATable(DFAStateList); GPBTables.setInitialDFAState(initialState); }
public string getAcceptCode(DFAState State) { int AcceptIndex = State.getAcceptSymbolIndex(); return(AcceptIndex.ToString()); }