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); }
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); }