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());
        }
Exemple #3
0
        //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());
        }