Beispiel #1
0
        public void Teste01()
        {
            string programa = "main begin write(1, \\s, 2.5, \\t, \"teste\", \\n). end";

            string expected = CabecalhoFixo +
                              "    ldc.i8 1" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    conv.i8" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(int64)" + Environment.NewLine +
                              "    ldstr \" \"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              "    ldc.r8 2.5" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(float64)" + Environment.NewLine +
                              "    ldstr \"\\t\"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              "    ldstr \"teste\"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              "    ldstr \"\\n\"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              Ret;

            var compilador = new Rules.Compiler();

            compilador.Compile(programa);

            Assert.IsFalse(string.IsNullOrWhiteSpace(compilador.Assembly));
            Assert.AreEqual(expected, compilador.Assembly);
        }
Beispiel #2
0
        public void Teste04()
        {
            string programa = "main begin" + Environment.NewLine +
                              "    float: valor." + Environment.NewLine +
                              "    read (valor)." + Environment.NewLine +
                              "    (valor > 0.0) ifTrueDo write (\"maior\")." + Environment.NewLine +
                              "                  ifFalseDo write (\"menor ou igual\"). end." + Environment.NewLine +
                              "end";

            string expected = CabecalhoFixo +
                              "    .locals(float64 valor)" + Environment.NewLine +
                              "    call string [mscorlib]System.Console::ReadLine()" + Environment.NewLine +
                              "    call float64 [mscorlib]System.Double::Parse(string)" + Environment.NewLine +
                              "    stloc valor" + Environment.NewLine +
                              "    label1:" + Environment.NewLine +
                              "    ldloc valor" + Environment.NewLine +
                              "    ldc.r8 0.0" + Environment.NewLine +
                              "    cgt" + Environment.NewLine +
                              "    brfalse label2" + Environment.NewLine +
                              "    ldstr \"maior\"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              "    br label3" + Environment.NewLine +
                              "    label2:" + Environment.NewLine +
                              "    ldstr \"menor ou igual\"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              "    label3:" + Environment.NewLine +
                              Ret;

            var compilador = new Rules.Compiler();

            compilador.Compile(programa);

            Assert.IsFalse(string.IsNullOrWhiteSpace(compilador.Assembly));
            Assert.AreEqual(expected, compilador.Assembly);
        }
Beispiel #3
0
        public void Teste05()
        {
            string programa = "main begin" + Environment.NewLine +
                              "    int: valor." + Environment.NewLine +
                              "    read (valor)." + Environment.NewLine +
                              "    (valor < 0) whileTrueDo read (valor). end." + Environment.NewLine +
                              "    (valor == 0) whileFalseDo write (valor, \\n)." + Environment.NewLine +
                              "                              valor -= 1. end." + Environment.NewLine +
                              "end";

            string expected = CabecalhoFixo +
                              "    .locals(int64 valor)" + Environment.NewLine +
                              "    call string [mscorlib]System.Console::ReadLine()" + Environment.NewLine +
                              "    call int64 [mscorlib]System.Int64::Parse(string)" + Environment.NewLine +
                              "    stloc valor" + Environment.NewLine +
                              "    label1:" + Environment.NewLine +
                              "    ldloc valor" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    ldc.i8 0" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    clt" + Environment.NewLine +
                              "    brfalse label2" + Environment.NewLine +
                              "    call string [mscorlib]System.Console::ReadLine()" + Environment.NewLine +
                              "    call int64 [mscorlib]System.Int64::Parse(string)" + Environment.NewLine +
                              "    stloc valor" + Environment.NewLine +
                              "    br label1" + Environment.NewLine +
                              "    label2:" + Environment.NewLine +
                              "    label3:" + Environment.NewLine +
                              "    ldloc valor" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    ldc.i8 0" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    ceq" + Environment.NewLine +
                              "    brtrue label4" + Environment.NewLine +
                              "    ldloc valor" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    conv.i8" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(int64)" + Environment.NewLine +
                              "    ldstr \"\\n\"" + Environment.NewLine +
                              "    call void [mscorlib]System.Console::Write(string)" + Environment.NewLine +
                              "    ldloc valor" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    ldc.i8 1" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    sub" + Environment.NewLine +
                              "    conv.i8" + Environment.NewLine +
                              "    stloc valor" + Environment.NewLine +
                              "    br label3" + Environment.NewLine +
                              "    label4:" + Environment.NewLine +
                              Ret;

            var compilador = new Rules.Compiler();

            compilador.Compile(programa);

            Assert.IsFalse(string.IsNullOrWhiteSpace(compilador.Assembly));
            Assert.AreEqual(expected, compilador.Assembly);
        }
Beispiel #4
0
        public void ErroSemantico()
        {
            string programa = "main begin" + Environment.NewLine +
                              "    int: lado." + Environment.NewLine +
                              "    write (\"digite um valor para lado: \")." + Environment.NewLine +
                              "    read (lado)." + Environment.NewLine +
                              "    area = lado * lado." + Environment.NewLine +
                              "    write (area)." + Environment.NewLine +
                              "end ";

            var compilador = new Rules.Compiler();

            Assert.ThrowsException <SemanticException>(() => compilador.Compile(programa));
        }
Beispiel #5
0
        public void Teste03()
        {
            string programa = "main begin" + Environment.NewLine +
                              "    int: lado, area." + Environment.NewLine +
                              "    read (lado)." + Environment.NewLine +
                              "    area = 0." + Environment.NewLine +
                              "    (lado > 0) ifTrueDo area = lado * lado. end." + Environment.NewLine +
                              "    write (area)." + Environment.NewLine +
                              "end ";

            string expected = CabecalhoFixo +
                              "    .locals(int64 lado)" + Environment.NewLine +
                              "    .locals(int64 area)" + Environment.NewLine +
                              "    call string [mscorlib]System.Console::ReadLine()" + Environment.NewLine +
                              "    call int64 [mscorlib]System.Int64::Parse(string)" + Environment.NewLine +
                              "    stloc lado" + Environment.NewLine +
                              "    ldc.i8 0" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    conv.i8" + Environment.NewLine +
                              "    stloc area" + Environment.NewLine +
                              "    label1:" + Environment.NewLine +
                              "    ldloc lado" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    ldc.i8 0" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    cgt" + Environment.NewLine +
                              "    brfalse label2" + Environment.NewLine +
                              "    ldloc lado" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    ldloc lado" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine +
                              "    mul" + Environment.NewLine +
                              "    conv.i8" + Environment.NewLine +
                              "    stloc area" + Environment.NewLine +
                              "    label2:" + Environment.NewLine +
                              "    ldloc area" + Environment.NewLine +
                              "    conv.r8" + Environment.NewLine + // verificar se esta linha derveria existir
                              "    conv.i8" + Environment.NewLine + // verificar se esta linha derveria existir
                              "    call void [mscorlib]System.Console::Write(int64)" + Environment.NewLine +
                              Ret;

            var compilador = new Rules.Compiler();

            compilador.Compile(programa);

            Assert.IsFalse(string.IsNullOrWhiteSpace(compilador.Assembly));
            Assert.AreEqual(expected, compilador.Assembly);
        }