Пример #1
0
        public void Escanear(string ruta)
        {
            estadoActual = 0;
            mt = new MatrizDeTransicion();
            mt.LeerDesdeArchivo("tablaDeTransicionCsharp.csv");
            Movimientos m = new Movimientos();
            estadosFinales = new Tokens();
            estadosFinales.LeerDesdeArchivo("tokens.txt");
            tokensReconocidos = new Tokens();
            pr.LeerDesdeArchivo("palabrasReservadas.txt");

            //Buscar el numero de token de identificadores y palabra reservada
            Token tid = estadosFinales.DameToken("id");
            nroTokenIdentificadores = tid.Numero;
            tid = estadosFinales.DameToken("pr");
            nroTokenPalabraReservada = tid.Numero;

            //Leer el archivo caracter por caracter
            FileStream stream = new FileStream (ruta, FileMode.Open, FileAccess.Read);
            StreamReader archivo = new StreamReader (stream);

            char caracter = ' ';
            int estadoSig;
            string palabra = "";
            bool leerDeArchivo = true;
            while (archivo.Peek () > -1) {
                if(leerDeArchivo){
                    caracter = (char)archivo.Read();
                }
                else{
                    leerDeArchivo = true;
                    palabra = "";
                }

                estadoSig = mt.Mover(estadoActual,caracter);
                //Console.WriteLine(m.Agregar(estadoActual,caracter,estadoSig));
                m.Agregar(estadoActual,caracter,estadoSig);
                estadoActual = estadoSig;
                if(estadosFinales.Contiene(estadoSig)){ //Reconocio el token
                    estadoActual = 0;
                    Token tk = new Token();
                    tk.Numero = estadoSig;
                    tk.Lexema = palabra;
                    if(estadoSig == nroTokenIdentificadores){
                        if(pr.EsPalabraReservada(palabra)){
                            estadoSig = nroTokenPalabraReservada;
                        }
                    }
                    //Detalles de un token
                    Token tkD = estadosFinales.DameToken(estadoSig);
                    if(tkD != null){
                        tk.Nombre = tkD.Nombre;
                        tk.Sinonimo = tkD.Sinonimo;
                    }
                    //Fin Detalles del token
                    palabra = "";
                    leerDeArchivo = false;
                    tokensReconocidos.Agregar(tk);
                }
                palabra += caracter.ToString();
            }
            archivo.Close ();

            //m.Imprimir();
            tokensReconocidos.Imprimir();
        }
Пример #2
0
        public void Escanear(string ruta)
        {
            estadoActual = 0;
            mt           = new MatrizDeTransicion();
            mt.LeerDesdeArchivo("tablaDeTransicionCsharp.csv");
            Movimientos m = new Movimientos();

            estadosFinales = new Tokens();
            estadosFinales.LeerDesdeArchivo("tokens.txt");
            tokensReconocidos = new Tokens();
            pr.LeerDesdeArchivo("palabrasReservadas.txt");

            //Buscar el numero de token de identificadores y palabra reservada
            Token tid = estadosFinales.DameToken("id");

            nroTokenIdentificadores = tid.Numero;
            tid = estadosFinales.DameToken("pr");
            nroTokenPalabraReservada = tid.Numero;

            //Leer el archivo caracter por caracter
            FileStream   stream  = new FileStream(ruta, FileMode.Open, FileAccess.Read);
            StreamReader archivo = new StreamReader(stream);

            char   caracter = ' ';
            int    estadoSig;
            string palabra       = "";
            bool   leerDeArchivo = true;

            while (archivo.Peek() > -1)
            {
                if (leerDeArchivo)
                {
                    caracter = (char)archivo.Read();
                }
                else
                {
                    leerDeArchivo = true;
                    palabra       = "";
                }

                estadoSig = mt.Mover(estadoActual, caracter);
                //Console.WriteLine(m.Agregar(estadoActual,caracter,estadoSig));
                m.Agregar(estadoActual, caracter, estadoSig);
                estadoActual = estadoSig;
                if (estadosFinales.Contiene(estadoSig))                 //Reconocio el token
                {
                    estadoActual = 0;
                    Token tk = new Token();
                    tk.Numero = estadoSig;
                    tk.Lexema = palabra;
                    if (estadoSig == nroTokenIdentificadores)
                    {
                        if (pr.EsPalabraReservada(palabra))
                        {
                            estadoSig = nroTokenPalabraReservada;
                        }
                    }
                    //Detalles de un token
                    Token tkD = estadosFinales.DameToken(estadoSig);
                    if (tkD != null)
                    {
                        tk.Nombre   = tkD.Nombre;
                        tk.Sinonimo = tkD.Sinonimo;
                    }
                    //Fin Detalles del token
                    palabra       = "";
                    leerDeArchivo = false;
                    tokensReconocidos.Agregar(tk);
                }
                palabra += caracter.ToString();
            }
            archivo.Close();

            //m.Imprimir();
            tokensReconocidos.Imprimir();
        }