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 nouvelle instance de la classe CodeGenerator . |
Propriétés
Propriété | Modificateurs | Type | Description |
---|---|---|---|
COMMENT_WRAP | Nombre | Longueur maximale d'un commentaire avant l'encapsulation. Ne tient pas compte du niveau de retrait. | |
definitions_ | protected |
{ [key: string]: string; } | Dictionnaire de définitions à imprimer avant le code. |
forBlock | Record<string, (block: Block, generator: this) => [chaîne, nombre] | chaîne | null> | Dictionnaire de fonctions de générateurs de blocs, associées par type de bloc. Chaque fonction de générateur de blocs nécessite deux paramètres: - le bloc pour générer du code pour et - l'instance du générateur de code (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 appropriée (par exemple, JavascripGenerator) ; et renvoie: - un tuple [code, priorité] (pour les blocs 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 de code légal pouvant 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 fonction souhaités dans les définitions_ aux noms de fonctions réels (pour éviter les conflits avec les fonctions utilisateur). |
INDENT | chaîne | Méthode de mise en retrait. Deux espaces sont définis par défaut, mais les générateurs de langue peuvent remplacer cette valeur pour augmenter le retrait ou passer aux tabulations. | |
INFINITE_LOOP_TRAP | chaîne | nul | Code arbitraire à injecter dans des emplacements qui risquent de provoquer des boucles infinies. Toutes les occurrences de "%1" est remplacé par l'ID de bloc ayant échoué. Exemple : checkTimeout(%1);\n |
|
isInitialized | boolean | nul | 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 sur "true" dans init font en sorte que blockToCode émette un avertissement 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-intérieure 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 | nul | Code arbitraire à injecter avant chaque instruction. Toutes les occurrences de "%1" est remplacé par l'identifiant de bloc de l'instruction. Exemple : highlight(%1);\n |
|
STATEMENT_SUFFIX | chaîne | nul | Code arbitraire à injecter après chaque instruction. Toutes les occurrences de "%1" est remplacé 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) | Roulez récursivement un arbre de blocs et renvoyez tous leurs commentaires. | |
blockToCode(block, opt_thisOnly) | Générez du code pour le bloc spécifié (et les blocs associés). Vous devez initialiser le générateur avant d'appeler cette fonction. | |
finish(code) | Accroche pour le code à exécuter à la fin de la génération du 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 le nom légal unique d'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 ce paramètre (par exemple, pour initialiser la base de données des 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 au début de chaque ligne de code. Destiné au retrait du code ou à l'ajout de marqueurs de commentaire. | |
Fournit_Fonction_(NomDuSouhaité; 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é, le code est enregistré et un nom réel est généré. Les appels ultérieurs dont le nom choisi est identique n'ont aucun effet, mais renvoient la même valeur renvoyée. Il appartient à l'appelant de s'assurer que la même valeur souhaiteName n'est pas utilisée 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 obtient un résultat 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 pour chaque bloc, pas seulement pour 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 niveau supérieur avec des sorties qui ne sont branchées sur rien. Les sous-classes peuvent remplacer ce paramètre (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 nommée de l'instruction. Mettez le code en retrait. Elle est principalement utilisée dans les générateurs. Lorsque vous essayez de générer du code à évaluer, utilisez workspaceToCode ou blockToCode. | |
valueToCode(block, name, outerOrder) | Générez un code représentant la valeur d'entrée spécifiée. | |
workspaceToCode(workspace) | Générez le code de tous les blocs de l'espace de travail dans la langue spécifiée. |