@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
111 lines • 8.41 kB
TypeScript
import { Atribuir, AcessoIndiceVariavel, AcessoElementoMatriz, AcessoMetodo, AcessoMetodoOuPropriedade, AcessoPropriedade, ArgumentoReferenciaFuncao, Agrupamento, AtribuicaoPorIndice, AtribuicaoPorIndicesMatriz, Binario, Chamada, DefinirValor, FuncaoConstruto, Dicionario, ExpressaoRegular, FimPara, FormatacaoEscrita, Isto, Literal, Logico, Super, Tupla, TipoDe, Unario, Vetor, ReferenciaFuncao, Leia, ComentarioComoConstruto, Separador, Variavel, Constante, AcessoIntervaloVariavel, TuplaN, Morsa, Bote } from '../construtos';
import { Declaracao, TendoComo, InicioAlgoritmo, CabecalhoPrograma, Classe, Const, ConstMultiplo, Expressao, FuncaoDeclaracao, Enquanto, Escolha, Escreva, Fazer, Importar, Para, ParaCada, Se, Tente, Var, VarMultiplo, Bloco, Continua, EscrevaMesmaLinha, Falhar, Retorna, Sustar, Comentario, TextoDocumentacao } from '../declaracoes';
import { CorrecaoSugeridaInterface, DiagnosticoAnalisadorSemanticoInterface, DiagnosticoSeveridade, ParametroInterface, SimboloInterface } from '../interfaces';
import { AnalisadorSemanticoInterface } from '../interfaces/analisador-semantico-interface';
import { ConstrutoInterface } from '../interfaces/construtos/construto-interface';
import { RetornoAnalisadorSemanticoInterface } from '../interfaces/retornos/retorno-analisador-semantico-interface';
import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../quebras';
import { GerenciadorEscopos } from './gerenciador-escopos';
/**
* Essa classe só existe para eliminar redundância entre todos os analisadores
* semânticos. Por padrão, quando um método não é implementado, ao invés de dar erro,
* simplesmente passa por ele (`return Promise.resolve()`).
*/
export declare abstract class AnalisadorSemanticoBase implements AnalisadorSemanticoInterface {
gerenciadorEscopos: GerenciadorEscopos;
diagnosticos: DiagnosticoAnalisadorSemanticoInterface[];
abstract analisar(declaracoes: Declaracao[]): Promise<RetornoAnalisadorSemanticoInterface>;
protected diagnosticoJaExiste(simbolo: SimboloInterface, mensagem: string): boolean;
erro(simbolo: SimboloInterface, mensagem: string, codigoDiagnostico?: string, simboloRelacionado?: SimboloInterface): void;
aviso(simbolo: SimboloInterface, mensagem: string, codigoDiagnostico?: string, simboloRelacionado?: SimboloInterface): void;
sugestao(simbolo: SimboloInterface, mensagem: string, correcoes: CorrecaoSugeridaInterface[], codigoDiagnostico?: string, simboloRelacionado?: SimboloInterface): void;
protected comparacaoArgumentosContraParametrosFuncao(simboloFuncao: SimboloInterface, parametros: ParametroInterface[], argumentos: ConstrutoInterface[]): void;
/**
* Obtém o tipo de uma expressão (pode ser Literal, Variavel, Binario, Leia, etc)
*/
protected obterTipoExpressao(expressao: ConstrutoInterface): string | null;
/**
* Infere o tipo de resultado de uma operação binária
*/
protected inferirTipoBinario(binario: Binario): string | null;
/**
* Marca as variáveis usadas em uma expressão.
*/
protected marcarVariaveisUsadasEmExpressao(expressao: ConstrutoInterface): void;
/**
* Stub para ser sobrescrito por subclasses que implementam análise de interpolações.
*/
protected verificarInterpolacaoTexto(_texto: string, _literal: Literal): void;
/**
* Analisa se todos os caminhos retornam
* @returns true se todos os caminhos retornam, false caso contrário
*/
protected todosOsCaminhosRetornam(declaracoes: Declaracao[]): boolean;
private verificarBlocoRetorna;
protected verificarSeRetorna(declaracaoSe: Se): boolean;
private verificarEscolhaRetorna;
visitarDeclaracaoTextoDocumentacao(declaracao: TextoDocumentacao): Promise<any> | void;
visitarExpressaoAcessoIntervaloVariavel(expressao: AcessoIntervaloVariavel): Promise<any> | void;
visitarExpressaoTuplaN(expressao: TuplaN): Promise<any> | void;
visitarExpressaoComentario(expressao: ComentarioComoConstruto): Promise<any> | void;
visitarExpressaoSeparador(expressao: Separador): Promise<any> | void;
adicionarDiagnostico(simbolo: SimboloInterface, mensagem: string, severidade?: DiagnosticoSeveridade, codigoDiagnostico?: string, simboloRelacionado?: SimboloInterface): void;
visitarExpressaoArgumentoReferenciaFuncao(expressao: ArgumentoReferenciaFuncao): Promise<any> | void;
visitarExpressaoReferenciaFuncao(expressao: ReferenciaFuncao): Promise<any> | void;
visitarExpressaoAcessoMetodo(expressao: AcessoMetodo): Promise<any> | void;
visitarExpressaoAcessoPropriedade(expressao: AcessoPropriedade): Promise<any> | void;
visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any>;
visitarDeclaracaoClasse(declaracao: Classe): Promise<any>;
visitarDeclaracaoComentario(declaracao: Comentario): void | Promise<any>;
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any>;
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<any>;
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<any>;
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<any>;
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<any>;
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<any>;
visitarDeclaracaoFazer(declaracao: Fazer): Promise<any>;
visitarDeclaracaoImportar(declaracao: Importar): Promise<any>;
visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any>;
visitarDeclaracaoPara(declaracao: Para): Promise<any>;
visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<any>;
visitarDeclaracaoSe(declaracao: Se): Promise<any>;
visitarDeclaracaoTendoComo(declaracao: TendoComo): Promise<any>;
visitarDeclaracaoTente(declaracao: Tente): Promise<any>;
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any>;
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel): Promise<any>;
visitarExpressaoAcessoElementoMatriz(expressao: AcessoElementoMatriz): Promise<any>;
visitarExpressaoAcessoMetodoOuPropriedade(expressao: AcessoMetodoOuPropriedade): Promise<any>;
visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<any>;
visitarExpressaoAtribuicaoPorIndice(expressao: AtribuicaoPorIndice): Promise<any>;
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: AtribuicaoPorIndicesMatriz): Promise<any>;
visitarExpressaoBinaria(expressao: Binario): Promise<any>;
visitarExpressaoBloco(declaracao: Bloco): Promise<any>;
visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
visitarExpressaoDeChamada(expressao: Chamada): Promise<any>;
visitarExpressaoDefinirValor(expressao: DefinirValor): Promise<any>;
visitarExpressaoFuncaoConstruto(expressao: FuncaoConstruto): Promise<any>;
visitarExpressaoDeVariavel(expressao: Variavel | Constante): Promise<any>;
visitarExpressaoDicionario(expressao: Dicionario): Promise<any>;
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<RegExp>;
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<any>;
visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
visitarExpressaoFimPara(declaracao: FimPara): Promise<any>;
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<any>;
visitarExpressaoIsto(expressao: Isto): Promise<any>;
visitarExpressaoLeia(expressao: Leia): Promise<any>;
visitarExpressaoLiteral(expressao: Literal): Promise<any>;
visitarExpressaoLogica(expressao: Logico): Promise<any>;
visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
visitarExpressaoSuper(expressao: Super): Promise<any>;
visitarExpressaoSustar(declaracao?: Sustar): SustarQuebra;
visitarExpressaoTupla(expressao: Tupla): Promise<any>;
visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
visitarExpressaoUnaria(expressao: Unario): Promise<any>;
visitarExpressaoVetor(expressao: Vetor): Promise<any>;
visitarExpressaoMorsa(expressao: Morsa): Promise<any>;
visitarExpressaoBote(expressao: Bote): Promise<any>;
}
//# sourceMappingURL=analisador-semantico-base.d.ts.map