blockly > CodeGenerator

Classe CodeGenerator

Classe destinée à un générateur de code qui traduit les blocs dans un langage.

Signature :

export declare class CodeGenerator 

Constructeurs

Constructeur Les modificateurs Description
(constructeur)(nom) Construit une instance de la classe CodeGenerator.

Propriétés

Propriété Les modificateurs Type Description
COMMENT_WRAP number Longueur maximale d'un commentaire avant son retour à la ligne. Ne tient pas compte du niveau de retrait.
definitions_ protected { [clé: chaîne]: chaîne; } Dictionnaire de définitions à imprimer avant le code.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Un dictionnaire de fonctions de générateur de blocs, associé par type de bloc. Chaque fonction de générateur de blocs utilise deux paramètres:

- le bloc pour générer du code et - l'instance de CodeGenerator (ou sous-classe) appelante, afin que la fonction puisse appeler les méthodes définies ci-dessous (par exemple, blockToCode) ou sur la sous-classe pertinente (par exemple, JavascripGenerator) ;

et renvoie:

- un tuple [code, priorité] (pour les blocs de valeur/expression), ou - une chaîne contenant le code généré (pour les blocs d'instructions), ou - null si aucun code ne doit être émis pour le bloc.

FUNCTION_NAME_PLACEHOLDER_ chaîne Il est utilisé comme espace réservé dans les fonctions définies à l'aide de CodeGenerator.provideFunction_. Il ne doit pas s'agir d'un code juridique pouvant apparaître légitimement dans une définition de fonction (ou d'un commentaire), ni confondre l'analyseur d'expressions régulières.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [clé: chaîne]: chaîne; } Un dictionnaire mappant les noms de fonctions souhaités dans les définitions_ avec les noms de fonction réels (pour éviter les conflits avec les fonctions utilisateur).
INDENTATION chaîne Méthode de mise en retrait. La valeur par défaut est de deux espaces, mais les générateurs de langue peuvent remplacer ce paramètre pour augmenter le retrait ou passer aux tabulations.
INFINITE_LOOP_TRAP chaîne | null Code arbitraire à injecter dans des emplacements qui risquent de provoquer des boucles infinies. Toutes les instances de "%1" seront remplacées par l'identifiant de bloc qui a échoué. Exemple : checkTimeout(%1);\n
isInitialized boolean | null Indique si la méthode init a été appelée. Avec les générateurs qui définissent cet indicateur sur "false" après la création et "true" dans init, blockToCode émet un avertissement s'il n'a pas été initialisé. Si cet indicateur n'est pas modifié, il n'aura aucun effet.
name_ chaîne
nameDB_? Noms (Facultatif) Une base de données contenant des noms de variables et de procédures.
ORDER_OVERRIDES numéro[][] Liste des paires externe-interne qui ne nécessitent PAS de parenthèses.
RESERVED_WORDS_ protected chaîne Liste de mots réservés séparés par une virgule.
STATEMENT_PREFIX chaîne | null Code arbitraire à injecter avant chaque instruction. Toutes les occurrences de « %1 » seront remplacées par l 'identifiant de bloc de l'instruction. Exemple : highlight(%1);\n
STATEMENT_SUFFIX chaîne | null Code arbitraire à injecter après chaque instruction. Toutes les occurrences de « %1 » seront remplacées par l 'identifiant de bloc de l'instruction. Exemple : highlight(%1);\n

Méthodes

Méthode Les modificateurs Description
addLoopTrap(branch, block) Ajoute un piège en boucle infinie au contenu d'une boucle. Ajoutez un suffixe d'instruction au début du bloc "loop" (juste après l'exécution de l'instruction loop) et un préfixe d'instruction à la fin du bloc "loop" (juste avant l'exécution de l'instruction loop).
addReservedWords(words) Ajoutez un ou plusieurs mots à la liste des mots réservés pour cette langue.
allNestedComments(block) Parcourez un arbre de blocs de manière récursive et renvoyez tous leurs commentaires.
blockToCode(block, opt_thisOnly) Générez le code pour le bloc spécifié (et les blocs associés). Le générateur doit être initialisé avant d'appeler cette fonction.
finish(code) Hook pour que le code s'exécute à la fin de la génération de code. Les sous-classes peuvent remplacer ce paramètre, par exemple pour ajouter des instructions d'importation ou des définitions de variables au début du code généré.
getProcedureName(name) Récupère un nom légal unique pour une procédure définie par l'utilisateur. Avant d'appeler cette méthode, la propriété nameDB_ de la classe doit déjà avoir été initialisée. Cette opération s'effectue généralement dans la fonction init de la classe du générateur de code.
getVariableName(nameOrId) Récupère un nom légal unique pour une variable définie par l'utilisateur. Avant d'appeler cette méthode, la propriété nameDB_ de la classe doit déjà avoir été initialisée. Cette opération s'effectue généralement dans la fonction init de la classe du générateur de code.
init(_workspace) Hook pour que le code s'exécute avant le début de la génération de code. Des sous-classes peuvent remplacer ce paramètre, par exemple pour initialiser la base de données de noms de variables.
injectId(msg, block) Injectez un ID de bloc dans un message pour remplacer "%1". Utilisé pour STATEMENT_PREFIX, STATEMENT_SUFFIX et INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Ajoutez un préfixe commun à chaque ligne de code. Destiné à la mise en retrait du code ou à l'ajout de marqueurs de commentaires.
fournirFonction_(NomSatisfaisant, code)

Définissez une fonction définie par le développeur (et non une procédure définie par l'utilisateur) à inclure dans le code généré. Permet de créer des fonctions d'assistance privées. La première fois que cette méthode est appelée avec un nom souhaité donné, le code est enregistré et un nom réel est généré. Les appels suivants avec le même "preferredName" n'ont aucun effet, mais ont la même valeur renvoyée.

Il appartient à l'appelant de s'assurer que le nom "wantName" n'est pas utilisé pour différentes fonctions d'assistance (par exemple, utilisez "colorRandom" et "listRandom", et non "random"). Il n'y a aucun risque d'entrer en conflit avec des mots réservés ou des noms de variables ou de procédures définis par l'utilisateur.

Le code est généré lorsque la méthode CodeGenerator.finish() est appelée.

scrub_(_block, code, _opt_thisOnly) protected Tâches courantes pour générer du code à partir de blocs Elle est appelée à partir de "blockToCode" et de l'ensemble de chaque bloc, pas seulement des blocs de premier niveau. Les sous-classes peuvent remplacer ce paramètre, par exemple pour générer du code pour les instructions suivant le bloc ou pour gérer les commentaires du bloc spécifié et de tout bloc de valeur connecté.
scrubNakedValue(line) Les valeurs nues sont des blocs de premier niveau avec des sorties qui ne sont branchées sur rien. Ce paramètre peut être ignoré par les sous-classes, par exemple si leur langue n'autorise pas les valeurs nues.
statementToCode(block, name) Génère une chaîne de code représentant les blocs associés à l'entrée d'instruction nommée. Mettez en retrait le code. Elle est principalement utilisée dans les générateurs. Lorsque vous essayez de générer du code pour évaluer, examinez à l'aide de workspaceToCode ou blockToCode.
valueToCode(block, name, outerOrder) Générez le code représentant la valeur d'entrée spécifiée.
workspaceToCode(workspace) Générez du code pour tous les blocs de l'espace de travail dans la langue spécifiée.