@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
149 lines • 7.33 kB
TypeScript
import { AcessoMetodoOuPropriedade, Construto, Decorador, FuncaoConstruto, Leia, ListaCompreensao, ImportarComoConstruto } from '../../construtos';
import { Escreva, Se, Enquanto, Continua, Retorna, Escolha, Tente, Fazer, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar, Falhar, ParaCada, Comentario, TextoDocumentacao, Importar } from '../../declaracoes';
import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../../interfaces';
import { Localizacao } from '../../lexador/dialetos/localizacao';
import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
import { ErroAvaliadorSintatico } from '../erro-avaliador-sintatico';
import { RetornoAvaliadorSintatico } from '../../interfaces/retornos/retorno-avaliador-sintatico';
import { PilhaEscopos } from '../pilha-escopos';
import { InformacaoElementoSintatico } from '../../informacao-elemento-sintatico';
import { ClasseDeModulo } from '../../interpretador/estruturas';
/**
* O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
* Há dois grupos de estruturas de alto nível: Construtos e Declarações.
*
* A grande diferença entre este avaliador e os demais é a forma como são entendidos os blocos de escopo.
* Este avaliador espera uma estrutura de pragmas, que explica quantos espaços há na frente de cada linha.
*/
export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
simbolos: SimboloInterface[];
erros: ErroAvaliadorSintatico[];
localizacoes: {
[linha: number]: Localizacao;
};
tiposDefinidosEmCodigo: {
[nomeTipo: string]: Declaracao;
};
tiposDefinidosPorBibliotecas: {
[nomeTipo: string]: ClasseDeModulo;
};
pilhaEscopos: PilhaEscopos;
primitivasConhecidas: {
[nomeModuloOuClasse: string]: {
[nomePrimitiva: string]: InformacaoElementoSintatico;
};
};
hashArquivo: number;
atual: number;
blocos: number;
escopos: number[];
performance: boolean;
superclasseAtual: string | undefined;
intuirTipoQualquerParaIdentificadores: boolean;
pilhaDecoradores: Decorador[];
constructor(performance?: boolean);
protected logicaComumInferenciaTiposAcessoMetodoOuPropriedade(entidadeChamada: AcessoMetodoOuPropriedade): string;
protected logicaComumInferenciaTiposVariaveisEConstantes(inicializador: Construto, tipoPrevio: string): string;
expressaoLeia(): Promise<Leia>;
declaracaoDeVariavel(): Var;
private variavelJaDeclarada;
private declaracaoImplicitaVariaveis;
private temPadraoMultiplaAtribuicao;
private temPadraoVarComoPalavraChave;
private consumirIdentificadores;
private consumirInicializadores;
private construirValidacaoDesempacotamento;
declaracaoDeVariaveis(): Promise<any>;
sincronizar(): void;
erro(simbolo: SimboloInterface, mensagemDeErro: string): ErroAvaliadorSintatico;
consumir(tipo: string, mensagemDeErro: string): SimboloInterface<string>;
verificarTipoSimboloAtual(tipo: string): boolean;
verificarTipoProximoSimbolo(tipo: string): boolean;
simboloAtual(): SimboloInterface;
simboloAnterior(): SimboloInterface;
simboloNaPosicao(posicao: number): SimboloInterface;
estaNoFinal(): boolean;
avancarEDevolverAnterior(): SimboloInterface<string>;
verificarSeSimboloAtualEIgualA(...argumentos: string[]): boolean;
primario(): Promise<Construto>;
finalizarChamada(entidadeChamada: Construto): Promise<Construto>;
chamar(): Promise<Construto>;
unario(): Promise<Construto>;
exponenciacao(): Promise<Construto>;
multiplicar(): Promise<Construto>;
adicaoOuSubtracao(): Promise<Construto>;
bitShift(): Promise<Construto>;
bitE(): Promise<Construto>;
bitOu(): Promise<Construto>;
comparar(): Promise<Construto>;
comparacaoIgualdade(): Promise<Construto>;
em(): Promise<Construto>;
e(): Promise<Construto>;
ou(): Promise<Construto>;
protected seTernario(): Promise<Construto>;
tupla(): Promise<Construto>;
atribuir(): Promise<Construto>;
expressao(): Promise<Construto>;
declaracaoEscreva(simboloEscreva: SimboloInterface): Promise<Escreva>;
declaracaoExpressao(): Promise<Expressao>;
blocoEscopo(): Promise<any[]>;
declaracaoEnquanto(): Promise<Enquanto>;
declaracaoEscolha(): Promise<Escolha>;
protected declaracaoParaCada(simboloPara: SimboloInterface): Promise<ParaCada>;
declaracaoPara(): Promise<ParaCada>;
/**
* Função auxiliar para validar se o alvo pode ser iterado.
*/
private validarSeAlvoEIteravel;
declaracaoSe(): Promise<Se>;
declaracaoSustar(): Sustar;
protected resolverDecoradores(): Promise<void>;
declaracaoComentario(): Comentario;
declaracaoContinua(): Continua;
declaracaoRetorna(): Promise<Retorna>;
construtoImportar(): Promise<ImportarComoConstruto>;
declaracaoImportar(): Promise<Importar>;
declaracaoImportarDe(): Promise<Importar>;
declaracaoTente(): Promise<Tente>;
declaracaoFazer(): Promise<Fazer>;
funcao(tipo: string, construtor?: boolean): Promise<FuncaoDeclaracao>;
logicaComumParametros(): Promise<Array<Partial<ParametroInterface>>>;
/**
* Resolve uma lista de compreensão.
* @param retornoExpressao A expressão já resolvida que representa o valor a ser retornado.
* @returns {ListaCompreensao} A lista de compreensão resolvida.
*/
protected resolverCompreensaoDeLista(retornoExpressao: Construto): Promise<ListaCompreensao>;
protected verificarDefinicaoTipoAtual(): string;
declaracaoTextoDeDocumentacao(): TextoDocumentacao | undefined;
corpoDaFuncao(tipo: string): Promise<FuncaoConstruto>;
declaracaoDeClasse(): Promise<Classe>;
declaracaoFalhar(): Falhar;
/**
* Verifica se há pontos e vírgula no final de sentenças.
* Em Pituguês, ; só é permitido para separar múltiplos comandos na mesma linha,
* mas não no final de uma sentença/linha.
*/
private verificarPontosEVirgulasInvalidos;
/**
* Encontra o próximo símbolo que não seja comentário.
* Isso é importante porque comentários não afetam a validade do ponto e vírgula.
*/
private encontrarProximoSimboloNaoComentario;
/**
* Consome o símbolo atual, verificando se é uma declaração de função, variável, classe
* ou uma expressão.
* @returns Objeto do tipo `Declaracao`.
*/
resolverDeclaracaoForaDeBloco(): Promise<Declaracao | Declaracao[]>;
resolverDeclaracao(): Promise<Declaracao | Declaracao[]>;
/**
* Inicializa o primeiro nível da pilha de escopos, normalmente com ítens da biblioteca global.
* É separada da inicialização do avaliador sintático, pois é necessário manipular essa
* inicialização de outra forma em `delegua-node`.
*/
protected inicializarPilhaEscopos(): void;
analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintatico<Declaracao>>;
}
//# sourceMappingURL=avaliador-sintatico-pitugues.d.ts.map