blockly > CodeGenerator

Clase CodeGenerator

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

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 La longitud máxima de un comentario antes de unirlo. No tiene en cuenta el nivel de sangría.
definitions_ protected { [clave: string]: string; } Es un diccionario de definiciones que se imprimirá antes del código.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Un diccionario de funciones de generador de bloques, clasificado por tipo de bloque. Cada función del generador de bloques toma dos parámetros:

- el bloque para generar código para la instancia (o subclase) CodeGenerator que realiza la llamada, de modo que la función pueda llamar a los métodos definidos a continuación (por ejemplo, blockToCode) o en la subclase correspondiente (por ejemplo, JavascripGenerator)

y devuelve:

- 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 - null 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) ni debe confundir al analizador de expresiones regulares.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [clave: string]: string; } Un diccionario que asigna nombres de funciones deseados en definiciones_ con nombres reales de funciones (para evitar colisiones con las funciones del usuario).
INDENTE cadena Es el método de sangría. La configuración predeterminada es de dos espacios, pero los generadores de idiomas pueden anular esta opción para aumentar la sangría o cambiar a tabulaciones.
INFINITE_LOOP_TRAP cadena | nulo Código arbitrario para insertar en ubicaciones que corren el riesgo de generar bucles infinitos. Todas las instancias de "%1" se reemplazarán por el ID del bloque que falló. Por ejemplo: 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 con nombres de variables y procedimientos (opcional).
ORDER_OVERRIDES número[][] Lista de vinculaciones con unidades internas y externas 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. Por ejemplo: 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. Por ejemplo: highlight(%1);\n

Métodos

Método Modificadores Descripción
addLoopTrap(branch, block) Agrega una trampa infinita al contenido de un bucle. Agrega el sufijo de la sentencia al inicio del bloque del bucle (justo después de que se ejecuta la sentencia del bucle) y un prefijo de la sentencia 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) Araña recursivamente un árbol de bloques y devuelve todos sus comentarios.
blockToCode(block, opt_thisOnly) Genera un código para el bloque especificado (y los bloques adjuntos). El generador se debe inicializar antes de llamar a esta función.
finish(code) Enganche 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 se debe haber 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 se debe haber inicializado. Por lo general, esto se hace en la función init de la clase de generador de código.
init(_workspace) Enganche para que se ejecute el código antes de comenzar su generación. Las subclases pueden anular esto, p.ej., para inicializar la base de datos de nombres de variables.
injectId(msg, block). Inserta un ID de bloque en un mensaje para reemplazar "%1". Se usa para STATEMENT_AMOUNT, STATEMENT_SUFFIX, INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Antepón un prefijo común en cada línea de código. Está destinado a 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 elemento con un deseadoName determinado, se guarda el código y se genera un nombre real. Las llamadas posteriores con el mismo valor deseado no tienen efecto, pero tienen el mismo valor que se muestra.

Depende del llamador asegurarse de que no se use el mismo sameName para diferentes funciones auxiliares (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) 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., con el objetivo 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 vacíos son bloques de nivel superior con salidas que no se conectan a nada. Las subclases pueden anular esto, p.ej., si su lenguaje no permite valores vacíos.
statementToCode(block, name) Genera una cadena de código que represente los bloques adjuntos a la entrada de la sentencia con nombre. Aplicar 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.