blockly > CodeGenerator

Classe CodeGenerator

Classe para um gerador de código que traduz os blocos para uma linguagem.

Signature:

export declare class CodeGenerator 

Construtores

Construtor Modificadores Descrição
(construtor)(nome) Cria uma nova instância da classe CodeGenerator

Propriedades

Propriedade Modificadores Tipo Descrição
COMMENT_WRAP number O tamanho máximo de um comentário antes de encapsular. Não considera o nível de recuo.
definitions_ protected { [chave: string]: string; } Um dicionário de definições a ser mostrado antes do código.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Um dicionário de funções do gerador de blocos, codificadas por tipo de bloco. Cada função geradora de blocos usa dois parâmetros:

- o bloco para gerar código, e - a instância CodeGenerator (ou subclasse) de chamada, para que a função possa chamar métodos definidos abaixo (por exemplo, blockToCode) ou na subclasse relevante (por exemplo JavascripGenerator);

e retorna:

- uma tupla [código, precedência] (para blocos de valor/expressão) ou - uma string contendo o código gerado (para blocos de instrução) ou - nulo se nenhum código precisar ser emitido para o bloco.

FUNCTION_NAME_PLACEHOLDER_ string É usado como um marcador de posição em funções definidas com CodeGenerator.provideFunction_. Ele não pode ser um código legal que possa aparecer legitimamente em uma definição de função (ou comentário) e não pode confundir o analisador de expressões regulares.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [chave: string]: string; } Um dicionário que mapeia nomes de funções desejadas em definições_ para nomes de função reais (para evitar colisões com funções de usuário).
INDENTE string O método de recuo. O padrão é dois espaços, mas os geradores de idiomas podem substituí-lo para aumentar o recuo ou mudar para tabulações.
INFINITE_LOOP_TRAP string | nulo Código arbitrário para injetar em locais que correm o risco de causar loops infinitos. Todas as instâncias de "%1" serão substituídas pelo ID de bloqueio que falhou. Por exemplo, checkTimeout(%1);\n
isInitialized boolean | null Se o método init foi chamado. Geradores que definem essa flag como "false" após a criação e "true" em "init" farão com que o blockToCode emita um aviso se o gerador não tiver sido inicializado. Se essa sinalização não for alterada, ela não terá efeito.
name_ string
nameDB_? Nomes (Opcional) Um banco de dados de nomes de variáveis e procedimentos.
ORDER_OVERRIDES número[][] Lista de pares internos que NÃO exigem parênteses.
RESERVED_WORDS_ protected string Lista de palavras reservadas separadas por vírgulas.
STATEMENT_PREFIX string | nulo Código arbitrário a ser injetado antes de cada instrução. Todas as instâncias de "%1" serão substituídas pelo ID de bloqueio da instrução. Por exemplo, highlight(%1);\n
STATEMENT_SUFFIX string | nulo Código arbitrário a ser injetado após cada instrução. Todas as instâncias de "%1" serão substituídas pelo ID de bloqueio da instrução. Por exemplo, highlight(%1);\n

Métodos

Método Modificadores Descrição
addLoopTrap(branch, block) Adicione uma armadilha de loop infinito ao conteúdo de um loop. Adicione um sufixo de instrução no início do bloco de loop (logo após a execução da instrução de loop) e um prefixo de instrução no fim do bloco de loop (logo antes da execução da instrução de loop).
addReservedWords(words) Adicione uma ou mais palavras à lista de palavras reservadas para este idioma.
allNestedComments(block) Faça a indexação recursiva de uma árvore de blocos, retornando todos os comentários.
blockToCode(block, opt_thisOnly) Gere o código para o bloco especificado (e blocos anexados). O gerador precisa ser inicializado antes de chamar essa função.
finish(code). Hook para que o código seja executado no final da geração do código. As subclasses podem substituir isso, por exemplo, para prefixar o código gerado com instruções de importação ou definições de variáveis.
getProcedureName(name) Recebe um nome legal exclusivo para um procedimento definido pelo usuário. Antes de chamar esse método, a propriedade nameDB_ da classe já precisa ter sido inicializada. Isso geralmente é feito na função init da classe geradora de código.
getVariableName(nameOrId) Recebe um nome legal exclusivo para uma variável definida pelo usuário. Antes de chamar esse método, a propriedade nameDB_ da classe já precisa ter sido inicializada. Isso geralmente é feito na função init da classe geradora de código.
init(_workspace) Hook para que o código seja executado antes do início da geração de código. As subclasses podem substituir isso, por exemplo, para inicializar o banco de dados de nomes de variáveis.
injectId(msg, block). Injete um ID de bloco em uma mensagem para substituir "%1". Usado para STATEMENT_PLACE, STATEMENT_SUFFIX e INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Inclua um prefixo comum em cada linha de código. Usado para recuar o código ou adicionar marcadores de comentários.
provideFunction_(GOALName, código)

Defina uma função definida pelo desenvolvedor (não um procedimento definido pelo usuário) a ser incluída no código gerado. Usado para criar funções auxiliares particulares. Na primeira vez em que isso é chamado com um certo wantName, o código é salvo e um nome real é gerado. Chamadas seguintes com o mesmo wantName não têm efeito, mas têm o mesmo valor de retorno.

Cabe ao autor da chamada garantir que o mesmo wantName não seja usado para diferentes funções auxiliares (por exemplo, use "colourRandom" e "listRandom", e não "random"). Não há risco de colisão com palavras reservadas ou nomes de procedimento ou variáveis definidos pelo usuário.

O código é gerado quando CodeGenerator.finish() é chamado.

scrub_(_block, code, _opt_thisOnly) protected Tarefas comuns para gerar código a partir de blocos. Ele é chamado em "blockToCode" e em todos os blocos, não apenas em blocos de nível superior. As subclasses podem substituir isso, por exemplo, para gerar código para instruções após o bloco ou para manipular comentários para o bloco especificado e quaisquer blocos de valor conectados.
scrubNakedValue(line) Os valores sem "www" são blocos de nível superior com saídas que não estão conectadas a nada. Isso pode ser substituído pelas subclasses, por exemplo, caso a linguagem não permita valores simples.
statementToCode(block, name) Gere uma string de código que represente os blocos anexados à entrada da instrução nomeada. Recuar o código. Isso é usado principalmente em geradores. Ao gerar um código para avaliar, observe o uso de workspaceToCode ou blockToCode.
valueToCode(block, name, outerOrder) Gerar um código que representa a entrada de valor especificado.
workspaceToCode(workspace) Gerar código para todos os blocos do espaço de trabalho no idioma especificado.