public void Interpretar(CContexto pContexto)
        {
            //Si ya no hay elementos que interpretar salimos
            if (pContexto.Expresion.Length == 0) return;

            //Verificamos si empieza con nueve
            if (pContexto.Expresion.StartsWith(Nueve()))
            {
                //Agregamos el nuevo por la posicion donde esté 1,10,100
                pContexto.Valor += (9 * Factor());

                //Eliminamos dos caracteres IX, XC,CM
                pContexto.Expresion = pContexto.Expresion.Substring(2);
            }
            //Verificamos si empieza con Cuatro
            else if (pContexto.Expresion.StartsWith(Cuatro()))
            {
                //Agregamos el nuevo por la posicion donde esté 1,10,100
                pContexto.Valor += (4 * Factor());

                //Eliminamos dos caracteres
                pContexto.Expresion = pContexto.Expresion.Substring(2);
            }
            //Verificamos si empieza con Cinco
            else if (pContexto.Expresion.StartsWith(Cinco()))
            {
                //Agregamos el nuevo por la posicion donde esté 1,10,100
                pContexto.Valor += (5 * Factor());

                //Eliminamos dos caracteres
                pContexto.Expresion = pContexto.Expresion.Substring(1);
            }
            //Recorremos las unidades enconctradas I, X, C
            while (pContexto.Expresion.StartsWith(Unidad()))
            {
                pContexto.Valor += (1 * Factor());
                pContexto.Expresion = pContexto.Expresion.Substring(1);
            }
        }
        public static void _Main()
        {
            string    expresionEvaluar = "MCMXCIX";
            CContexto contexto         = new CContexto(expresionEvaluar);

            //Se contruye el arbol de parse
            //cada clase corresponde a una regla en la gramatica
            //empezamos por los miles
            List <CExpresion> Arbol = new List <CExpresion>();

            Arbol.Add(new CExpresionMiles());
            Arbol.Add(new CExpresionCientos());
            Arbol.Add(new CExpresionDecenas());
            Arbol.Add(new CExpresionUnidad());

            //Interpretamos siguiendo las reglas gramaticales q estan n l arbol
            foreach (var exp in Arbol)
            {
                exp.Interpretar(contexto);
            }
            Console.WriteLine("El numero romano {0} es {1} en decimal", expresionEvaluar, contexto.Valor);
            Console.ReadLine();
        }