UNPKG

@designliquido/lincones-sqlite

Version:
65 lines 3.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AvaliadorSintatico = void 0; const comandos_1 = require("../comum/fontes/comandos"); const avaliador_sintatico_base_1 = require("../comum/fontes/avaliador-sintatico/avaliador-sintatico-base"); const tipos_de_simbolos_1 = __importDefault(require("../comum/fontes/tipos-de-simbolos")); class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBase { declaracao() { switch (this.simbolos[this.atual].tipo) { case tipos_de_simbolos_1.default.ATUALIZAR: return this.comandoAtualizar(); case tipos_de_simbolos_1.default.CRIAR: return this.comandoCriar(); case tipos_de_simbolos_1.default.EXCLUIR: return this.comandoExcluir(); case tipos_de_simbolos_1.default.INSERIR: return this.comandoInserir(); case tipos_de_simbolos_1.default.SELECIONAR: return this.comandoSelecionar(); default: this.avancar(); return null; } } comandoCriar() { // Essa linha nunca deve retornar erro. this.consumir(tipos_de_simbolos_1.default.CRIAR, 'Esperado palavra reservada "CRIAR".'); // Essa linha nunca deve retornar erro. const simboloTabela = this.consumir(tipos_de_simbolos_1.default.TABELA, 'Esperado palavra reservada "TABELA".'); let seNaoExistir = false; if (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.SE)) { this.consumir(tipos_de_simbolos_1.default.NAO, 'Esperado palavra reservada "NÃO" após palavra reservada "SE".'); this.consumir(tipos_de_simbolos_1.default.EXISTIR, 'Esperado palavra reservada "EXISTIR" após palavra reservada "NÃO".'); seNaoExistir = true; } const nomeDaTabela = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, 'Esperado identificador de nome de tabela após palavra reservada "TABELA".'); this.consumir(tipos_de_simbolos_1.default.PARENTESE_ESQUERDO, 'Esperado abertura de parênteses após nome da tabela'); const colunas = []; do { colunas.push(this.comandoCriacaoColuna()); } while (this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.VIRGULA)); this.consumir(tipos_de_simbolos_1.default.PARENTESE_DIREITO, 'Esperado fechamento de parênteses após nome da tabela'); this.verificarSeSimboloAtualEIgualA(tipos_de_simbolos_1.default.PONTO_VIRGULA); return new comandos_1.Criar(simboloTabela.linha, nomeDaTabela.lexema, colunas, seNaoExistir); } analisar(retornoLexador) { this.erros = []; this.atual = 0; this.bloco = 0; this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || []; const declaracoes = []; while (!this.estaNoFinal()) { declaracoes.push(this.declaracao()); } return { comandos: declaracoes, erros: this.erros }; } } exports.AvaliadorSintatico = AvaliadorSintatico; //# sourceMappingURL=avaliador-sintatico.js.map