@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
91 lines • 4.55 kB
TypeScript
import { AcessoIntervaloVariavel, ArgumentoReferenciaFuncao, Atribuir, Binario, Chamada, Construto, FormatacaoEscrita, Literal, ReferenciaFuncao, TipoDe, Variavel, TuplaN } from '../../construtos';
import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, FuncaoDeclaracao, Retorna, Var } from '../../declaracoes';
import { DiagnosticoAnalisadorSemantico } from '../../interfaces/erros';
import { RetornoAnalisadorSemantico } from '../../interfaces/retornos/retorno-analisador-semantico';
import { RetornoQuebra } from '../../quebras';
import { AnalisadorSemanticoBase } from '../analisador-semantico-base';
import { FuncaoHipoteticaInterface } from '../funcao-hipotetica-interface';
import { PilhaVariaveis } from '../pilha-variaveis';
/**
* O Analisador Semântico de Pituguês.
*/
export declare class AnalisadorSemanticoPitugues extends AnalisadorSemanticoBase {
pilhaVariaveis: PilhaVariaveis;
funcoes: {
[nomeFuncao: string]: FuncaoHipoteticaInterface;
};
atual: number;
diagnosticos: DiagnosticoAnalisadorSemantico[];
constructor();
/**
* Marca as variáveis usadas em uma expressão.
* Versão estendida da classe base com tratamento adicional de construtos Pituguês.
*/
protected marcarVariaveisUsadasEmExpressao(expressao: Construto): void;
verificarTipoAtribuido(declaracao: Var | Const): void;
visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
private verificarTipoDe;
visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
private verificarFalhar;
visitarChamadaPorArgumentoReferenciaFuncao(argumentoReferenciaFuncao: ArgumentoReferenciaFuncao, argumentos: Construto[]): void;
visitarChamadaPorReferenciaFuncao(referenciaFuncao: ReferenciaFuncao, argumentos: Construto[]): void;
visitarChamadaPorVariavel(entidadeChamadaVariavel: Variavel, argumentos: Construto[]): Promise<void>;
visitarExpressaoDeChamada(expressao: Chamada): Promise<void>;
private resolverSimboloAlvoAtribuicao;
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<void>;
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<void>;
private verificarCondicao;
private verificarVariavelBinaria;
private verificarVariavel;
private verificarExpressao;
private verificarBinario;
private verificarOperadorBinario;
/**
* Verifica se os tipos dos operandos são compatíveis
*/
private verificarTiposOperandos;
/**
* Verifica divisão por zero recursivamente
*/
private verificarDivisaoPorZero;
/**
* Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
* Retorna o valor se puder ser determinado, ou null caso contrário
*/
private avaliarExpressaoConstante;
/**
* Calcula o resultado de uma operação binária em tempo de compilação
*/
private calcularOperacaoBinaria;
/**
* Obtém o tipo de uma expressão (pode ser Literal, Variavel, ou Binario)
*/
obterTipoExpressao(expressao: Construto): string | null;
/**
* Infere o tipo de resultado de uma operação binária
*/
protected inferirTipoBinario(binario: Binario): string | null;
private verificarExistenciaConstruto;
private verificarLogico;
private verificarChamada;
private verificarLadoLogico;
/**
* Verifica interpolações de texto e marca variáveis como usadas
*/
protected verificarInterpolacaoTexto(texto: string, literal: Literal): void;
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
visitarExpressaoFormatacaoEscrita(expressao: FormatacaoEscrita): Promise<any>;
private verificarBinarioEmExpressao;
visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
visitarExpressaoDeVariavel(expressao: Variavel | Construto): Promise<any>;
visitarExpressaoAcessoIntervaloVariavel(expressao: AcessoIntervaloVariavel): Promise<any>;
visitarExpressaoTuplaN(expressao: TuplaN): Promise<any>;
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<any>;
verificarVariaveisNaoUsadas(): void;
analisar(declaracoes: Declaracao[]): Promise<RetornoAnalisadorSemantico>;
}
//# sourceMappingURL=analisador-semantico-pitugues.d.ts.map