blockly > CodeGenerator

Clase CodeGenerator

Es la clase de un generador de código que traduce los bloques a un idioma.

Signature:

export declare class CodeGenerator 

Constructores

Constructor Modificadores Descripción
(constructor)(nombre) Construye una instancia nueva de la clase CodeGenerator.

Propiedades

Propiedad Modificadores Tipo Descripción
COMMENT_WRAP número Longitud máxima de un comentario antes de unirlo. No tiene en cuenta el nivel de sangría.
definitions_ protected { [clave: cadena]: cadena; } Un diccionario de definiciones que se imprimirá antes del código.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Es un diccionario de funciones del generador de bloques, vinculado por tipo de bloque. Cada función del generador de bloques tiene dos parámetros:

- el bloque para generar código para la instancia CodeGenerator (o subclase), de modo que la función pueda llamar a los métodos definidos a continuación (p.ej., blockToCode) o en la subclase relevante (p.ej., JavascripGenerator),

y muestra:

- una tupla de [código, precedencia] (para bloques de valor o expresión), o - una cadena que contiene el código generado (para bloques de instrucciones), o - nulo si no se debe emitir ningún código para el bloque.

FUNCTION_NAME_PLACEHOLDER_ cadena Se usa como marcador de posición en funciones definidas con CodeGenerator.provideFunction_. No debe ser un código legal que pueda aparecer legítimamente en una definición de función (o un comentario) y no debe confundir al analizador de expresiones regulares.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [clave: cadena]: cadena; } Es un diccionario que asigna los nombres de las funciones deseadas en las definiciones_ a los nombres de las funciones reales (para evitar colisiones con las funciones del usuario).
INDENTE cadena Es el método de sangría. El valor predeterminado es de dos espacios, pero los generadores de idiomas pueden anular esto para aumentar la sangría o cambiar a tabulaciones.
INFINITE_LOOP_TRAP cadena | nulo Código arbitrario para insertar en ubicaciones con el riesgo de generar bucles infinitos. Todas las instancias de "%1" se reemplazarán por el ID del bloque que fallaron. P. ej., checkTimeout(%1);\n
isInitialized boolean | null Si se llamó al método init. Los generadores que establecen esta marca como false después de la creación y true en init harán que blockToCode emita una advertencia si no se inicializó el generador. Si no se modifica esta marca, no tendrá ningún efecto.
name_ cadena
nameDB_? Nombres Una base de datos de nombres de variables y procedimientos (opcional).
ORDER_OVERRIDES número[][] Lista de vinculaciones externas/interiores que NO requieren paréntesis.
RESERVED_WORDS_ protected cadena Lista de palabras reservadas separadas por comas.
STATEMENT_PREFIX cadena | nulo Código arbitrario que se insertará antes de cada sentencia. Todas las instancias de "%1" se reemplazarán por el ID de bloque de la sentencia. P. ej., highlight(%1);\n
STATEMENT_SUFFIX cadena | nulo Código arbitrario para insertar después de cada sentencia. Todas las instancias de "%1" se reemplazarán por el ID de bloque de la sentencia. P. ej., highlight(%1);\n

Métodos

Método Modificadores Descripción
addLoopTrap(branch, block) Agrega una trampa de bucle infinito al contenido de un bucle. Agrega el sufijo de la sentencia al comienzo del bloque de bucle (justo después de que se ejecute la sentencia del bucle) y un prefijo de la declaración al final del bloque del bucle (justo antes de que se ejecute la sentencia del bucle).
addReservedWords(words) Agrega una o más palabras a la lista de palabras reservadas para este idioma.
allNestedComments(block) De forma recurrente, arranca un árbol de bloques y muestra todos sus comentarios.
blockToCode(block, opt_thisOnly) Genera código para el bloque especificado (y los bloques adjuntos). Se debe inicializar el generador antes de llamar a esta función.
finish(code) Enlace para que el código se ejecute al final de la generación del código. Las subclases pueden anular esto, p.ej., para anteponer instrucciones de importación o definiciones de variables al código generado.
getProcedureName(name) Obtiene un nombre legal único para un procedimiento definido por el usuario. Antes de llamar a este método, la propiedad nameDB_ de la clase ya debe haberse inicializado. Por lo general, esto se hace en la función init de la clase de generador de código.
getVariableName(nameOrId) Obtiene un nombre legal único para una variable definida por el usuario. Antes de llamar a este método, la propiedad nameDB_ de la clase ya debe haberse inicializado. Por lo general, esto se hace en la función init de la clase de generador de código.
init(_workspace) Enlace para que se ejecute el código antes de que comience la generación de código. Las subclases pueden anular esto, p.ej., para inicializar la base de datos de nombres de variables.
injectId(msg, block). Incorpora un ID de bloque en un mensaje para reemplazar "%1". Se usa para STATEMENT_PREFIX, STATEMENT_SUFFIX y INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Antepón un prefijo común en cada línea de código. Está diseñado para agregar sangría al código o agregar marcadores de comentarios.
proporcionarFunción_(nombredeseado, código)

Define una función definida por el desarrollador (no un procedimiento definido por el usuario) para que se incluya en el código generado. Se usa para crear funciones auxiliares privadas. La primera vez que se llama a este campo con un objeto deseados, se guarda el código y se genera un nombre real. Las llamadas posteriores con el mismo wantName no tienen efecto, pero tienen el mismo valor que se muestra.

Depende del emisor asegurarse de que no se use el mismo wantName para las diferentes funciones de ayuda (p.ej., usa "colourRandom" y "listRandom", no "random"). No hay peligro de colisionar con palabras reservadas o nombres de variables o procedimientos definidos por el usuario.

El código obtiene un resultado cuando se llama a CodeGenerator.finish().

scrub_(_block, code, _opt_thisOnly) protected Tareas comunes para generar código a partir de bloques Se llama desde blockToCode y se llama en cada bloque, no solo en los bloques de nivel superior. Las subclases pueden anular esto, p.ej., a fin de generar código para las sentencias que siguen al bloque o para manejar comentarios para el bloque especificado y cualquier bloque de valor conectado.
scrubNakedValue(line) Los valores simples son bloques de nivel superior con salidas que no están conectadas a nada. Las subclases pueden anular esto, p.ej., si su lenguaje no permite valores desnudos.
statementToCode(block, name) Genera una cadena de código que represente los bloques adjuntos a la entrada de la sentencia con nombre. Aplica sangría al código. Se usa principalmente en generadores. Cuando intentes generar código para evaluar, usa workspaceToCode o blockToCode.
valueToCode(block, name, outerOrder) Genera un código que represente la entrada de valor especificado.
workspaceToCode(workspace) Genera código para todos los bloques del lugar de trabajo en el idioma especificado.