예제 #1
0
        public void Interpret(Contexto contexto)
        {
            if (contexto.getInput().Length == 0)
            {
                return;
            }
            else if (contexto.getInput().StartsWith(Nove()))
            {
                contexto.setOutput(contexto.getOutput() + (9 * Multiplicador()));
                contexto.setInput(contexto.getInput().Substring(2));
            }
            else if (contexto.getInput().StartsWith(Quatro()))
            {
                contexto.setOutput(contexto.getOutput() + (4 * Multiplicador()));
                contexto.setInput(contexto.getInput().Substring(2));
            }
            else if (contexto.getInput().StartsWith(Cinco()))
            {
                contexto.setOutput(contexto.getOutput() + (5 * Multiplicador()));
                contexto.setInput(contexto.getInput().Substring(1));
            }

            while (contexto.getInput().StartsWith(Um()))
            {
                contexto.setOutput(contexto.getOutput() + (1 * Multiplicador()));
                contexto.setInput(contexto.getInput().Substring(1));
            }
        }
예제 #2
0
        /*
         * - INTENÇÃO: dada uma linguagem, definir uma representação para a sua gramática juntamente com um interpretador que
         *          usa representação para interpretar sentenças da linguagem.
         * - Uma forma de incluir elementos da linguagem em um programa.
         * - Usa classes para representar cada regra de uma gramatica (expressão regular).
         */
        static void Main(string[] args)
        {
            string   romano   = "MCMXXVIII";
            Contexto contexto = new Contexto(romano);

            //Lista de expressões
            List <Expressao> tree = new List <Expressao>();

            tree.Add(new Milhar());
            tree.Add(new Centena());
            tree.Add(new Dezena());
            tree.Add(new Unidade());

            // Interpreter
            tree.ForEach(exp =>
            {
                exp.Interpret(contexto);
            });

            Console.WriteLine(contexto.getOutput());
        }