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. |