예제 #1
0
        public void ExampleSinErroresTest()
        {
            using (var lexer = new FTCCompiler.Lexer("ExampleSinErrores.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => _resultList.Add(s));

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"D:\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.AreEqual(_resultList.Count, 0);
            }
        }
예제 #2
0
        public void AsignacionArrayIncorrectaTest()
        {
            using (var lexer = new FTCCompiler.Lexer("AsignacionArrayIncorrecta.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => _resultList.Add(s));

                var tree = parser.Parse();

                Assert.AreEqual(true, tree.HasErrors);
                Assert.AreEqual(3, _resultList.Count);

                Assert.AreEqual("[7,11] SEM: Se esperaba una expresión 'Integer' y se encontró una del tipo 'Boolean'.", _resultList[0]);
                Assert.AreEqual("[8,8] SEM: No se encontró el identificador 'X'.", _resultList[1]);
                Assert.AreEqual("[9,8] SEM: Se esperaba una expresión 'Integer' y se encontró una del tipo 'Boolean'.", _resultList[2]);
            }
        }
예제 #3
0
        public void SubroutineTest()
        {
            using (var lexer = new FTCCompiler.Lexer("Subroutine.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                //using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                //{
                //    tree.Serialize(tw.BaseStream);
                //}

                // Assert.AreEqual(_resultList.Count, 0);
            }
        }
예제 #4
0
        public void ArrayIndiceExpresionNoEnteraTest()
        {
            using (var lexer = new FTCCompiler.Lexer("ArrayIndiceExpresionNoEntera.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => _resultList.Add(s));

                var tree = parser.Parse();

                Assert.AreEqual(true, tree.HasErrors);
                Assert.AreEqual(3, _resultList.Count);

                Assert.AreEqual("[10,16] SEM: El indice de un vector debe ser una expresión entera.", _resultList[0]);
                Assert.AreEqual("[11,14] SEM: El indice de un vector debe ser una expresión entera.", _resultList[1]);
                Assert.AreEqual("[12,15] SEM: El indice de un vector debe ser una expresión entera.", _resultList[2]);
            }
        }
예제 #5
0
        public void OperacionMenorNoEnterosEnCondicionTest()
        {
            using (var lexer = new FTCCompiler.Lexer("OperacionMenorNoEnterosEnCondicion.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => _resultList.Add(s));

                var tree = parser.Parse();

                Assert.AreEqual(true, tree.HasErrors);
                Assert.AreEqual(3, _resultList.Count);

                Assert.AreEqual("[11,15] SEM: Se esperaba una expresión 'Integer' y se encontró una del tipo 'Boolean'.", _resultList[0]);
                Assert.AreEqual("[12,19] SEM: Se esperaba una expresión 'Integer' y se encontró una del tipo 'Boolean'.", _resultList[1]);
                Assert.AreEqual("[13,21] SEM: Se esperaba una expresión 'Integer' y se encontró una del tipo 'Boolean'.", _resultList[2]);
            }
        }
예제 #6
0
        public void ShouldFailWithInvalidExpression()
        {
            using (var lexer = new FTCCompiler.Lexer("InvalidExpression1.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.IsTrue(_resultList[0] == "[4,13] SIN: Se esperaba ';' y se encontró 'M'.");
                Assert.AreEqual(_resultList.Count, 1);
            }
        }
예제 #7
0
        public void ShouldNotReturnErrorRecuperacion1()
        {
            using (var lexer = new FTCCompiler.Lexer("Recuperacion-1.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.IsTrue(_resultList[0] == "[6,5] SIN: Se esperaba 'identificador' y se encontró ':'.");
                Assert.IsTrue(_resultList[1] == "[12,5] SIN: Se esperaba 'expresión entera' y se encontró ']'.");
                Assert.AreEqual(_resultList.Count, 2);
            }
        }
예제 #8
0
        public void EnvironmentTest()
        {
            using (var lexer = new FTCCompiler.Lexer("Environment.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.Fail("Should have failed with MainNotFoundException");

                Assert.IsTrue(_resultList[0] == "[4,7] SIN: Se esperaba 'identificador' y se encontró ','.");
                Assert.AreEqual(_resultList.Count, 1);
            }
        }
예제 #9
0
        public void ShouldNotReturnErrorRecuperacion2()
        {
            using (var lexer = new FTCCompiler.Lexer("Recuperacion-2.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.IsTrue(_resultList[0] == "[2,12] SIN: Se esperaba 'integer','boolean' y se encontró 'enteros'.");
                Assert.IsTrue(_resultList[1] == "[16,13] SIN: Se esperaba ';' y se encontró ''Visualizacion''.");
                Assert.IsTrue(_resultList[2] == "[17,12] SIN: Se esperaba ';' y se encontró '?'.");
                Assert.AreEqual(_resultList.Count, 3);
            }
        }
예제 #10
0
        public void ShouldReturnErrorShowLn()
        {
            using (var lexer = new FTCCompiler.Lexer("ErrorShowLn.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.Fail("Should have failed with MainNotFoundException");

                Assert.IsTrue(_resultList[0] == "[16,12] SIN: Se esperaba ':=' y se encontró ''Visualizacion''.");
                Assert.IsTrue(_resultList.Count == 1);
            }
        }
예제 #11
0
        public void ShouldReturnErrorWhile()
        {
            using (var lexer = new FTCCompiler.Lexer("ErrorWhile.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.Fail("Should have failed with MainNotFoundException");

                Assert.IsTrue(_resultList[0] == "[14,3] SIN: Se esperaba 'end-while' y se encontró 'end-'.");
                Assert.IsTrue(_resultList[1] == "[15,9] SIN: Se esperaba 'end-proc' y se encontró ';'.");
                Assert.AreEqual(_resultList.Count, 2);
            }
        }
예제 #12
0
        public void ShouldNotReturnErrorRecuperacion3()
        {
            using (var lexer = new FTCCompiler.Lexer("Recuperacion-3.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.Fail("Should have failed with MainNotFoundException");

                Assert.IsTrue(_resultList[0] == "[1,31] SIN: Se esperaba ':' y se encontró 'R'.");
                Assert.IsTrue(_resultList[1] == "[2,21] SIN: Se esperaba 'número','true o false' y se encontró 'TRUE'.");
                Assert.IsTrue(_resultList[2] == "[21,13] SIN: Se esperaba ';' y se encontró 'Q'.");
                Assert.AreEqual(_resultList.Count, 3);
            }
        }
예제 #13
0
        public void ShouldReturnErrorParameters()
        {
            using (var lexer = new FTCCompiler.Lexer("ErrorParameters.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => { _resultList.Add(s); });

                var tree = parser.Parse();

                using (var tw = File.CreateText(@"C:\Users\Ivan\Documents\Proyectos\FTC Compiler\tree\syntaxTree.xml"))
                {
                    tree.Serialize(tw.BaseStream);
                }

                Assert.Fail("Should have failed with MainNotFoundException");

                Assert.IsTrue(_resultList[0] == "[1,33] SIN: Se esperaba 'identificador' y se encontró ':'.");
                Assert.IsTrue(_resultList[1] == "[3,18] SIN: Se esperaba ':' y se encontró ')'.");
                Assert.IsTrue(_resultList[2] == "[11,9] SIN: Se esperaba 'end-func' y se encontró ';'.");
                Assert.AreEqual(_resultList.Count, 3);
            }
        }
예제 #14
0
        public void OperacionBinariaDistintosTipoDeDatosTest()
        {
            using (var lexer = new FTCCompiler.Lexer("OperacionBinariaDistintosTipoDeDatos.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => _resultList.Add(s));

                var tree = parser.Parse();

                Assert.AreEqual(true, tree.HasErrors);
                Assert.AreEqual(8, _resultList.Count);

                Assert.AreEqual("[11,15] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[0]);
                Assert.AreEqual("[12,15] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[1]);
                Assert.AreEqual("[13,16] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[2]);
                Assert.AreEqual("[14,15] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[3]);
                Assert.AreEqual("[15,16] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[4]);
                Assert.AreEqual("[16,16] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[5]);
                Assert.AreEqual("[17,19] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[6]);
                Assert.AreEqual("[18,21] SEM: No se pueden comparar una expresión de tipo 'Integer' con una de tipo 'Boolean'.", _resultList[7]);
            }
        }
예제 #15
0
        public void OperadorXorNoBooleanoEnCondicionTest()
        {
            using (var lexer = new FTCCompiler.Lexer("OperadorXorNoBooleanoEnCondicion.txt"))
            {
                var parser = new FTCCompiler.Parser(lexer, (s) => _resultList.Add(s));

                var tree = parser.Parse();

                Assert.AreEqual(true, tree.HasErrors);
                Assert.AreEqual(8, _resultList.Count);

                Assert.AreEqual("[11,11] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[0]);
                Assert.AreEqual("[11,17] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[1]);
                Assert.AreEqual("[12,11] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[2]);
                Assert.AreEqual("[12,21] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[3]);
                Assert.AreEqual("[13,15] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[4]);
                Assert.AreEqual("[13,21] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[5]);
                Assert.AreEqual("[14,15] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[6]);
                Assert.AreEqual("[14,23] SEM: Se esperaba una expresión 'Boolean' y se encontró una del tipo 'Integer'.", _resultList[7]);
            }
        }