blockly > CodeGenerator

Classe CodeGenerator

Classe pour un générateur de code qui traduit les blocs dans un langage.

Signature :

export declare class CodeGenerator 

Constructeurs

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

Propriétés

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

Dictionnaire de fonctions de générateur de blocs, associées 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 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 légal qui pourrait apparaître légitimement dans une définition de fonction (ou un commentaire), et il ne doit pas confondre l'analyseur d'expressions régulières.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } Dictionnaire mappant les noms de fonctions souhaités dans les définitions_ avec des 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 langues peuvent remplacer ce paramètre pour augmenter le retrait ou passer aux tabulations.
INFINITE_LOOP_TRAP chaîne | null Code arbitraire à injecter dans les emplacements qui risquent de provoquer des boucles infinies. Toutes les instances de "%1" sont remplacées par l'identifiant de bloc ayant échoué. Exemple : checkTimeout(%1);\n
isInitialized boolean | null Indique si la méthode init a été appelée. Les générateurs qui définissent cet indicateur sur "false" après la création et "true" dans init entraînent l'envoi d'un avertissement par "blockToCode" si le générateur 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 de noms de variables et de procédures.
ORDER_OVERRIDES nombre[][] 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" sont 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" sont remplacées par l'identifiant de bloc de l'instruction. Exemple : highlight(%1);\n

Méthodes

Méthode 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 de boucle (juste après l'exécution de l'instruction de boucle) et un préfixe d'instruction à la fin du bloc de boucle (juste avant l'exécution de l'instruction de boucle).
addReservedWords(words) Ajoutez un ou plusieurs mots à la liste des mots réservés pour cette langue.
allNestedComments(block) Explorez un arbre de blocs de façon 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 au code généré des instructions d'importation ou des définitions de variables.
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. Les sous-classes peuvent remplacer cette valeur, par exemple pour initialiser la base de données de noms de variables.
injectId(msg, block) Injectez un identifiant 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ée à la mise en retrait du code ou à l'ajout de marqueurs de commentaires.
fournir la fonction_(NomSouhaité, 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é. Utilisé pour créer des fonctions d'assistance privées. La première fois que cette méthode est appelée avec un nom désiré donné, le code est enregistré et un nom réel est généré. Les appels ultérieurs comportant le même "wantName" n'ont aucun effet, mais renvoient la même valeur de retour.

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

Le code obtient une sortie lorsque CodeGenerator.finish() est appelé.

scrub_(_block, code, _opt_thisOnly) Tâches courantes pour générer du code à partir de blocs Cette méthode est appelée depuis "blockToCode" et est appelée sur chaque bloc, pas seulement sur les blocs de niveau supérieur. Les sous-classes peuvent remplacer ce paramètre, par exemple pour générer du code pour les instructions qui suivent le bloc ou pour gérer les commentaires du bloc spécifié et des blocs de valeurs connectés.
scrubNakedValue(line) Les valeurs nues sont des blocs de premier niveau avec des sorties qui ne sont branchées à rien. Les sous-classes peuvent remplacer cette valeur, par exemple si leur langue n'autorise pas les valeurs nues.
statementToCode(block, name) Générez une chaîne de code représentant les blocs associés à l'entrée d'instruction nommée. Mettez le code en retrait. Ceci est principalement utilisé dans les générateurs. Lorsque vous essayez de générer du code pour évaluer le code, utilisez workspaceToCode ou blockToCode.
valueToCode(block, name, outerOrder) Génère un 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.