blockly > CodeGenerator

CodeGenerator-Klasse

Klasse für einen Codegenerator, der die Blöcke in eine Sprache übersetzt.

Unterschrift:

export declare class CodeGenerator 

Konstruktoren

Konstruktor Modifikatoren Beschreibung
(Konstruktor)(Name) Erstellt eine neue Instanz der CodeGenerator-Klasse

Attribute

Attribut Modifikatoren Typ Beschreibung
COMMENT_WRAP Zahl Maximale Länge eines Kommentars vor dem Zeilenumbruch. Die Einrückungsebene wird nicht berücksichtigt.
definitions_ protected { [key: string]: string; } Ein Wörterbuch mit Definitionen, das vor dem Code ausgegeben werden soll.
forBlock Record<string, (block: Block, generator: this) => [Zeichenfolge, Zahl] | String | null&gt;

Ein Wörterbuch mit Funktionen für Blockgeneratoren, aufgeschlüsselt nach Blocktyp. Jede Blockgeneratorfunktion benötigt zwei Parameter:

- den Block, für den Code generiert werden soll, und - die aufrufende CodeGenerator-Instanz (oder Unterklasse), damit die Funktion unten definierte Methoden (z.B. blockToCode) oder für die entsprechende Unterklasse (z.B. JavascripGenerator) aufrufen kann

und gibt Folgendes zurück:

- ein [Code, Rangfolge]-Tupel (für Wert-/Ausdrucksblöcke) oder - eine Zeichenfolge, die den generierten Code (für Anweisungsblöcke) enthält, oder - null, wenn kein Code für den Block ausgegeben werden soll.

FUNCTION_NAME_PLACEHOLDER_ String Dies wird als Platzhalter in Funktionen verwendet, die mit CodeGenerator.deployFunction_ definiert wurden. Er darf kein gültiger Code sein, der legitim in einer Funktionsdefinition (oder einem Kommentar) erscheinen könnte, und darf den Parser für reguläre Ausdrücke nicht verwechseln.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } Ein Wörterbuch, das gewünschte Funktionsnamen in Definitionen_ den tatsächlichen Funktionsnamen zuordnet (um Kollisionen mit Nutzerfunktionen zu vermeiden).
INDENTIEREN String Die Methode des Einzugs. Die Standardeinstellung sind zwei Leerzeichen. Sprachgeneratoren können diese Einstellung jedoch überschreiben, um den Einzug zu vergrößern oder zu Tabulatoren zu wechseln.
INFINITE_LOOP_TRAP String | null Beliebiger Code, der an Stellen eingeschleust wird, die Endlosschleifen verursachen. Beliebige Vorkommen von "%1" wird durch die fehlerhafte Blockier-ID ersetzt. Beispiel: checkTimeout(%1);\n
isInitialized boolean | null Gibt an, ob die Initialisierungsmethode aufgerufen wurde. Generatoren, die dieses Flag nach der Erstellung auf false und in init auf true setzen, lösen blockToCode eine Warnung aus, wenn der Generator nicht initialisiert wurde. Wenn diese Markierung nicht geändert wird, hat sie keine Auswirkungen.
name_ String
nameDB_? Namen (Optional) Eine Datenbank mit Variablen- und Prozedurnamen.
ORDER_OVERRIDES Zahl[][] Liste der äußeren inneren Paare, für die KEINE Klammern erforderlich sind.
RESERVED_WORDS_ protected String Durch Kommas getrennte Liste reservierter Wörter.
STATEMENT_PREFIX String | null Beliebiger Code, der vor jeder Anweisung eingeschleust wird. Beliebige Vorkommen von "%1" wird durch die Block-ID der Anweisung ersetzt. Beispiel: highlight(%1);\n
STATEMENT_SUFFIX String | null Beliebiger Code, der nach jeder Anweisung eingefügt wird. Beliebige Vorkommen von "%1" wird durch die Block-ID der Anweisung ersetzt. Beispiel: highlight(%1);\n

Methoden

Methode Modifikatoren Beschreibung
addLoopTrap(branch, block) Fügen Sie dem Inhalt einer Schleife eine Endlosschleife hinzu. Fügen Sie das Anweisungssuffix am Anfang des Schleifenblocks (direkt nach der Ausführung der Schleifenanweisung) und ein Anweisungspräfix am Ende des Schleifenblocks (direkt vor der Ausführung der Schleifenanweisung) hinzu.
addReservedWords(words) Fügen Sie der Liste der für diese Sprache reservierten Wörter ein oder mehrere Wörter hinzu.
allNestedComments(block) Spinnen rekursiv einen Baum aus Blöcken und liefern alle Kommentare zurück.
blockToCode(block, opt_thisOnly) Generieren Sie Code für den angegebenen Block (und die angehängten Blöcke). Der Generator muss initialisiert werden, bevor diese Funktion aufgerufen wird.
Finish(Code) Hook für Code, der am Ende der Codegenerierung ausgeführt werden soll. Abgeleitete Klassen können dies außer Kraft setzen. Ein Beispiel: um dem generierten Code Importanweisungen oder Variablendefinitionen voranzustellen.
getProcedureName(name) Ruft einen eindeutigen, rechtsgültigen Namen für eine benutzerdefinierte Prozedur ab. Vor dem Aufrufen dieser Methode muss das Attribut nameDB_ der Klasse bereits initialisiert worden sein. Dies erfolgt normalerweise in der Funktion init der Klasse des Codegenerators.
getVariableName(nameOrId) Ruft einen eindeutigen, rechtsgültigen Namen für eine benutzerdefinierte Variable ab. Vor dem Aufrufen dieser Methode muss das Attribut nameDB_ der Klasse bereits initialisiert worden sein. Dies erfolgt normalerweise in der Funktion init der Klasse des Codegenerators.
init(_workspace) Hook für Code, der ausgeführt werden soll, bevor die Codegenerierung beginnt. Abgeleitete Klassen können dies außer Kraft setzen. Ein Beispiel: um die Datenbank mit Variablennamen zu initialisieren.
initId(msg, block) Fügen Sie eine Block-ID in eine Nachricht ein, um "%1" zu ersetzen. Verwendet für STATEMENT_PREFIX, STATEMENT_SUFFIX und INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Stellen Sie jeder Codezeile ein gemeinsames Präfix voran. Ist zum Einrücken von Code oder zum Hinzufügen von Kommentarmarkierungen vorgesehen.
deployFunction_(desiredName, Code)

Definieren Sie eine vom Entwickler definierte Funktion (keine benutzerdefinierte Prozedur), die in den generierten Code eingefügt werden soll. Wird zum Erstellen privater Hilfsfunktionen verwendet. Beim ersten Aufruf mit dem gewünschten Parameter wird der Code gespeichert und ein tatsächlicher Name generiert. Nachfolgende Aufrufe mit dem gleichen WunschName haben keine Auswirkungen, aber denselben Rückgabewert.

Der Aufrufer muss dafür sorgen, dass der gewünschte Name nicht für verschiedene Hilfsfunktionen verwendet wird (verwenden Sie beispielsweise "colourRandom" und "listRandom", nicht "Random"). Es besteht keine Gefahr eines Konflikts mit reservierten Wörtern oder benutzerdefinierten Variablen- oder Prozedurnamen.

Der Code wird ausgegeben, wenn CodeGenerator.Finish() aufgerufen wird.

scrub_(_block, code, _opt_thisOnly) Häufige Aufgaben zum Generieren von Code aus Blöcken Dieser wird von blockToCode aus aufgerufen und für jeden Block aufgerufen, nicht nur für Blöcke auf oberster Ebene. Abgeleitete Klassen können dies außer Kraft setzen. Ein Beispiel: , um Code für Anweisungen nach dem Block zu generieren oder um Kommentare für den angegebenen Block und alle verbundenen Wertblöcke zu verarbeiten.
scrubNakedValue(line) Grundwerte sind Blöcke auf oberster Ebene mit Ausgaben, die an nichts angeschlossen sind. Abgeleitete Klassen können dies außer Kraft setzen. Ein Beispiel: wenn ihre Sprache keine Grundwerte zulässt.
statementToCode(block, name) Generieren Sie einen Codestring, der die Blöcke darstellt, die an die Eingabe für die benannte Anweisung angehängt sind. Rücken Sie den Code ein. Es wird hauptsächlich in Generatoren verwendet. Wenn Sie versuchen, Code zur Auswertung zu generieren, verwenden Sie „workspaceToCode“ oder „blockToCode“.
valueToCode(block, name, outerOrder) Code generieren, der den eingegebenen Wert darstellt.
workspaceToCode(workspace) Generiert Code für alle Blöcke im Arbeitsbereich in der angegebenen Sprache.