UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

167 lines 8.58 kB
import { ConstrutoInterface } from '../../interfaces/construtos/construto-interface'; import { AcessoMetodoOuPropriedade, 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, PropriedadeClasse, TextoDocumentacao, Importar } from '../../declaracoes'; import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../../interfaces'; import { Localizacao } from '../../lexador/dialetos/localizacao'; import { RetornoLexadorInterface } from '../../interfaces/retornos/retorno-lexador-interface'; import { ErroAvaliadorSintatico } from '../erro-avaliador-sintatico'; import { RetornoAvaliadorSintaticoInterface } from '../../interfaces/retornos/retorno-avaliador-sintatico-interface'; 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; tiposDeFerramentasExternas: { [nomeFerramenta: string]: { [nomeTipo: string]: string; }; }; 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: ConstrutoInterface, 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, codigoDiagnostico?: string, simboloRelacionado?: SimboloInterface): 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; /** * Transforma uma string com interpolações (f-string) em código equivalente usando o método formatar. * Exemplo: f"Olá {nome}, você tem {idade} anos" -> "Olá " + nome + " você tem " + idade + " anos" * Com formatadores: f"{valor:.2f}" -> "" + "{:.2f}".formatar(valor) + "" * Com depuração: f"{usuario=}" -> "" + "{usuario=}".formatar(usuario) + "" */ private transformarInterpolacaoEmFormatacao; private ignorarComentarios; primario(): Promise<ConstrutoInterface>; finalizarChamada(entidadeChamada: ConstrutoInterface): Promise<ConstrutoInterface>; chamar(): Promise<ConstrutoInterface>; unario(): Promise<ConstrutoInterface>; exponenciacao(): Promise<ConstrutoInterface>; multiplicar(): Promise<ConstrutoInterface>; adicaoOuSubtracao(): Promise<ConstrutoInterface>; bitShift(): Promise<ConstrutoInterface>; bitE(): Promise<ConstrutoInterface>; bitOu(): Promise<ConstrutoInterface>; comparar(): Promise<ConstrutoInterface>; comparacaoIgualdade(): Promise<ConstrutoInterface>; em(): Promise<ConstrutoInterface>; e(): Promise<ConstrutoInterface>; ou(): Promise<ConstrutoInterface>; protected seTernario(): Promise<ConstrutoInterface>; tupla(): Promise<ConstrutoInterface>; bote(): Promise<ConstrutoInterface>; atribuir(): Promise<ConstrutoInterface>; 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: ConstrutoInterface): Promise<ListaCompreensao>; protected verificarDefinicaoTipoAtual(): string; declaracaoTextoDeDocumentacao(): TextoDocumentacao | undefined; corpoDaFuncao(tipo: string): Promise<FuncaoConstruto>; private resolverDecoradorDeAcesso; private resolverPropriedadeDeClasse; private resolverMetodoOuConstrutor; protected resolverMembroDeClasse(metodos: any[], propriedadesDeClasse: PropriedadeClasse[]): Promise<void>; 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: RetornoLexadorInterface<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintaticoInterface<Declaracao>>; } //# sourceMappingURL=avaliador-sintatico-pitugues.d.ts.map