Clase CodeGenerator
Es la clase para 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 la unión. No tiene en cuenta el nivel de sangría. | |
definitions_ | protected |
{ [clave: cadena]: cadena; }. | Es un diccionario de definiciones que se imprimirá antes del código. |
forBlock | Registro<string, (block: Block, generator: this) => [cadena, número] | cadena | null> | Un diccionario de funciones del generador de bloques, con clave por tipo de bloque. Cada función del generador de bloques tiene dos parámetros: - el bloque para generar código para la instancia de CodeGenerator (o subclase) 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 relevante (por ejemplo, JavascripGenerator); y devuelve: - una tupla [código, precedencia] (para bloques de valor/expresión), o - una cadena que contiene el código generado (para bloques de instrucciones), o - un valor nulo si no se debe emitir código para el bloque. |
|
FUNCTION_NAME_PLACEHOLDER_ | string | Se usa como marcador de posición en funciones definidas con CodeGenerator.providedFunction_. No debe ser un código legal que pueda aparecer legítimamente en una definición de función (o comentario) y no debe confundir al analizador de expresiones regulares. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [clave: cadena]: cadena; }. | Un diccionario que asigna los nombres de las funciones deseadas en las definiciones_ a los nombres reales de las funciones (para evitar colisiones con las funciones del usuario). |
INSENTIR | string | El método de sangría. El valor predeterminado es de dos espacios, pero los generadores de idioma pueden anularlo para aumentar la sangría o cambiar a tabulaciones. | |
INFINITE_LOOP_TRAP | cadena | nulo | Código arbitrario para inyectar en ubicaciones que corren el riesgo de causar bucles infinitos. Cualquier instancia de "%1" se reemplazará por el ID del bloque que falló. P. ej., checkTimeout(%1);\n |
|
isInitialized | booleano | nulo | Indica si se llamó al método init. Los generadores que establezcan 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 toca esta marca, no tendrá efecto. | |
name_ | string | ||
nameDB_? | Nombres | (Opcional) Es una base de datos de nombres de variables y procedimientos. | |
ORDER_OVERRIDES | número[][] | Lista de vinculaciones internas y externas que NO requieren paréntesis. | |
RESERVED_WORDS_ | protected |
string | Lista separada por comas de palabras reservadas. |
STATEMENT_PREFIX | cadena | nulo | Código arbitrario para insertar antes de cada instrucción. Cualquier instancia de "%1" se reemplazará por el ID del bloque de la sentencia. P. ej., highlight(%1);\n |
|
STATEMENT_SUFFIX | cadena | nulo | Código arbitrario para insertar después de cada instrucción. Cualquier instancia de "%1" se reemplazará por el ID del bloque de la sentencia. P. ej., highlight(%1);\n |
Métodos
Método | Modificadores | Descripción |
---|---|---|
addLoopTrap(branch, block) | Agrega una trampa de bucles infinita al contenido de un bucle. Agrega un sufijo de declaración al comienzo del bloque de bucle (justo después de que se ejecute la declaración de bucle) y un prefijo de declaración al final del bloque de bucle (justo antes de que se ejecute la declaración de bucle). | |
addReservedWords(words) | Agrega una o más palabras a la lista de palabras reservadas para este idioma. | |
allNestedComments(block) | Recursivamente, las arañas de un árbol de bloques muestran 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(código) | Enlace para que el código se ejecute al final de su generación. Las subclases pueden anular esto, p.ej., para anteponer al código generado con sentencias de importación o definiciones de variables. | |
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) | Enlace para que el código se ejecute 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(mensaje, bloqueo) | Inserta 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 aplicar sangría al código o agregar marcadores de comentarios. | |
proporcionarFunction_(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 método con un valor deseado, se guarda el código y se genera un nombre real. Las llamadas posteriores con el mismo nombre deseado no tienen efecto, pero sí tienen el mismo valor de retorno. Depende del emisor asegurarse de que no se use el mismo nombre deseado para diferentes funciones auxiliares (p.ej., usa "colourRandom" y "listRandom", no "random"). No hay peligro de colisionar con palabras reservadas, variables definidas por el usuario o nombres de procedimientos. 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 a este método desde blockToCode y se lo llama en cada bloque, no solo en los de nivel superior. Las subclases pueden anular esto, p.ej., para 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 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 vinculados a la entrada de la instrucción 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 código que represente la entrada del valor especificado. | |
workspaceToCode(workspace) | Genera código para todos los bloques del espacio de trabajo en el lenguaje especificado. |