Example #1
0
        public static int getACTION(int line, String terminal)
        {
            int[] A =
            {
                128, 133, 134, 135,  59, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,  40,  41, 147, 148, 149, 150,  36,
                0,     2, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                1,   132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 151,
                2,   132,   4, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                3,   132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132, 132,  10, 132,
                4,   132, 132,  17, 132, 132, 132, 132, 132,  18, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                5,    -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,
                6,   132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132, 132,  10, 132,
                7,   132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132, 132,  10, 132,
                8,   132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132, 132,  10, 132,
                9,   132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132,  26, 132, 132,
                10,  -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
                11,  132, 132, 132, 132, 132, 132, 132, 132,  27, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                12,  132, 132, 132, 132, 132, 132, 132, 132,  31, 132,  29,  30, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                13,  132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,  32, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                14,  132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,  33, 132, 132, 132, 132, 132, 132,
                15,   -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,
                16,  132, 132,  17, 132, 132, 132, 132, 132,  18, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                17,  132, 132, 132,  35, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                18,  132, 132, 132, 132,  37,  38, 132, 132, 132, 132,  39, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                19,  -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
                20,  -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
                21,  -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
                22,  -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23,
                23,  132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132,  26, 132, 132,
                24,  132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132,  26, 132, 132,
                25,  132, 132, 132, 132, 132, 132, 132,  11,  13,  12, 132, 132, 132, 132,  14, 132, 132, 132, 132,  26, 132, 132,
                26,  -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29,
                27,  132, 132, 132,  42, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                28,  132, 132, 132,  43, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                29,  -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13,
                30,  -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14,
                31,  -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15,
                32,  132, 132, 132, 132, 132, 132, 132, 132,  46, 132, 132,  47, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                33,  132, 132, 132, 132, 132, 132, 132, 132,  46, 132, 132,  47, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                34,   -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,
                35,   -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,
                36,  132, 132, 132,  51, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                37,   -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,
                38,   -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,
                39,   -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,
                40,  -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
                41,  -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
                42,  -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11,
                43,  -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12,
                44,  132, 132, 132,  52, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                45,  132, 132, 132, -19, 132, 132, 132, 132, 132, 132, 132, 132, 132,  53, 132, 132, 132, 132, 132, 132, 132, 132,
                46,  -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20,
                47,  -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21,
                48,  132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,  54, 132, 132, 132, 132, 132,
                49,  132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,  57, 132, 132, 132,
                50,  -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
                51,   -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,
                52,  -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17,
                53,  132, 132, 132, 132, 132, 132, 132, 132,  46, 132, 132,  47, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                54,  132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,  56, 132, 132, 132, 132,
                55,  -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18,
                56,  -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24,
                57,  132, 132, 132, 132, 132, 132, 132, 132,  46, 132, 132,  47, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
                58,  -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25
            };
            //inicio = 133, varinicio = 134, varfim = 135, int(inteiro) = 136, real = 137, lit = 138, leia = 139, id = 140, escreva = 141, literal = 142, num = 143, rcb = 144
            //opm = 145, se = 146, então = 147, opr = 148, fimse = 149, fim = 150.


            tabelaSintatico[,] tabelaACTION = new tabelaSintatico[60, 23];
            int t = 0;

            for (int i = 0; i < 60; i++)
            {
                for (int j = 0; j < 23; j++)
                {
                    tabelaACTION[i, j] = new tabelaSintatico(A[t]);
                    t++;
                }
            }
            int word   = 0;
            int column = 0;

            switch (terminal)
            {
            case "inicio":
                word = 133;
                break;

            case "varinicio":
                word = 134;
                break;

            case "varfim":
                word = 135;
                break;

            case "inteiro":
                word = 136;
                break;

            case "real":
                word = 137;
                break;

            case "lit":
                word = 138;
                break;

            case "leia":
                word = 139;
                break;

            case "escreva":
                word = 141;
                break;

            case "literal":
                word = 142;
                break;

            case "num":
                word = 143;
                break;

            case "rcb":
                word = 144;
                break;

            case "opm":
                word = 145;
                break;

            case "se":
                word = 146;
                break;

            case "entao":
                word = 147;
                break;

            case "opr":
                word = 148;
                break;

            case "fimse":
                word = 149;
                break;

            case "fim":
                word = 150;
                break;

            case "pt_v":
                word = 59;
                break;

            case "ab_p":
                word = 40;
                break;

            case "fc_p":
                word = 41;
                break;

            case "EOF":
                word = 36;
                break;

            case "id":
                word = 140;
                break;
            }

            for (int i = 0; i < 23; i++)
            {
                if (tabelaACTION[0, i].Elemento == word)
                {
                    column = i;
                }
            }

            return(tabelaACTION[line + 1, column].Elemento);
        }
Example #2
0
        public static int getGOTO(int line, String nonTerminal)
        {
            int[] G =
            {
                //      //  //  //  //  //  //  //  //   //  //
                128, 80, 86, 65, 133, 68, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
                0,    1,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                1,    0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                2,    0,  3,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                3,    0,  0,  5,   0,  0,   0,   6,   0,   7,   0,   0,   8,   9,   0,   0,
                4,    0,  0,  0,  15, 16,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                5,    0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                6,    0,  0, 19,   0,  0,   0,   6,   0,   7,   0,   0,   8,   9,   0,   0,
                7,    0,  0, 20,   0,  0,   0,   6,   0,   7,   0,   0,   8,   9,   0,   0,
                8,    0,  0, 21,   0,  0,   0,   6,   0,   7,   0,   0,   8,   9,   0,   0,
                9,    0,  0,  0,   0,  0,   0,  23,   0,  24,   0,   0,  25,   9,  22,   0,
                10,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                11,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                12,   0,  0,  0,   0,  0,   0,   0,  28,   0,   0,   0,   0,   0,   0,   0,
                13,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                14,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                15,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                16,   0,  0,  0,  34, 16,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                17,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                18,   0,  0,  0,   0,  0,  36,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                19,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                20,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                21,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                22,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                23,   0,  0,  0,   0,  0,   0,  23,   0,  24,   0,   0,  25,   9,  40,   0,
                24,   0,  0,  0,   0,  0,   0,  23,   0,  24,   0,   0,  25,   9,  41,   0,
                25,   0,  0,  0,   0,  0,   0,  23,   0,  24,   0,   0,  25,   9,  50,   0,
                26,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                27,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                28,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                29,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                30,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                31,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                32,   0,  0,  0,   0,  0,   0,   0,   0,   0,  44,  45,   0,   0,   0,   0,
                33,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  49,   0,   0,   0,  48,
                34,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                35,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                36,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                37,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                38,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                39,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                40,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                41,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                42,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                43,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                44,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                45,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                46,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                47,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                48,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                49,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                50,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                51,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                52,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                53,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  55,   0,   0,   0,   0,
                54,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                55,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                56,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                57,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  58,   0,   0,   0,   0,
                58,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
            };

            /*
             * 1° linha = tabela ASC
             * 1° coluna = Estados
             * LV = 133, TIPO = 134, ES = 135, ARG = 136, CMD = 137, LD = 138, OPRD = 139, COND = 140, CABECALHO = 141, CORPO = 142, EXP_R = 143
             */
            tabelaSintatico[,] tabelaGOTO = new tabelaSintatico[60, 16];

            int t = 0;

            for (int i = 0; i < 60; i++)
            {
                for (int j = 0; j < 16; j++)
                {
                    tabelaGOTO[i, j] = new tabelaSintatico(G[t]);
                    t++;
                }
            }

            int word   = 0;//guardar numero de cada variavel na tabela
            int column = 0;

            switch (nonTerminal)
            {
            case "LV":
                word = 133;
                break;

            case "TIPO":
                word = 134;
                break;

            case "ES":
                word = 135;
                break;

            case "ARG":
                word = 136;
                break;

            case "CMD":
                word = 137;
                break;

            case "LD":
                word = 138;
                break;

            case "OPRD":
                word = 139;
                break;

            case "COND":
                word = 140;
                break;

            case "CABECALHO":
                word = 141;
                break;

            case "CORPO":
                word = 142;
                break;

            case "EXP_R":
                word = 143;
                break;

            case "P":
                word = 80;
                break;

            case "V":
                word = 86;
                break;

            case "A":
                word = 65;
                break;

            case "D":
                word = 68;
                break;
            }

            for (int i = 0; i < 16; i++)
            {
                if (tabelaGOTO[0, i].Elemento == word)
                {
                    column = i;
                }
            }

            return(tabelaGOTO[line + 1, column].Elemento);
        }