blockly > CodeGenerator

Klasa CodeGenerator

Klasa generatora kodu do tłumaczenia bloków na język.

Podpis:

export declare class CodeGenerator 

Zespoły

Zespół Modyfikatory Opis
(konstruktor)(nazwa) Konstruuje nową instancję klasy CodeGenerator

Właściwości

Właściwość Modyfikatory Typ Opis
COMMENT_WRAP Liczba Maksymalna długość komentarza przed zawijaniem. Nie uwzględnia poziomu wcięcia.
definitions_ protected { [klucz: ciąg]: string; } Słownik definicji do wydrukowania przed kodem.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Słownik funkcji generatora bloków, kluczowany według typu bloku. Każda funkcja generatora bloków przyjmuje 2 parametry:

– blok do generowania kodu dla instancji CodeGenerator (lub podklasa), który umożliwia wywołanie metod zdefiniowanych poniżej (np. blockToCode) lub w odpowiedniej podklasie (np. JavascripGenerator),

i zwraca:

- a [kod, pierwszeństwo] (dla bloków wartości/wyrażeń) lub - ciąg zawierający wygenerowany kod (dla bloków instrukcji) lub - null, jeśli nie powinien być wysyłany żaden kod.

FUNCTION_NAME_PLACEHOLDER_ string, Jest on używany jako symbol zastępczy w funkcjach zdefiniowanych za pomocą narzędzia CodeGenerator.provideFunction_. Nie może to być kod prawny, który może prawidłowo pojawiać się w definicji funkcji (lub komentarzu), ani nie może mylić parsera wyrażeń regularnych.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [klucz: ciąg]: string; } Słownik mapujący żądane nazwy funkcji w definicjach_ na rzeczywiste nazwy funkcji (aby uniknąć kolizji z funkcjami użytkownika).
ODCH.STANDARDOWE string, Metoda wcięcia. Domyślnie są to 2 spacje, ale generatory języków mogą ją zastąpić, aby zwiększyć wcięcie lub przejść na karty.
INFINITE_LOOP_TRAP string | null Dowolny kod do wstrzykiwania w miejscach, które mogą spowodować zapętlenie nieskończone. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku, którego nie udało się przetworzyć. Na przykład: checkTimeout(%1);\n
isInitialized boolean | null Wskazuje, czy metoda init została wywołana. Generatory, które po utworzeniu ustawią tę flagę na false, i prawda w init, spowodują wygenerowanie ostrzeżenia blockToCode, jeśli generator nie został zainicjowany. Jeśli ta flaga nie zostanie zmieniona, nie będzie to miało żadnego efektu.
name_ string,
nameDB_? Nazwy (Opcjonalnie) Baza danych zawierająca nazwy zmiennych i procedur.
ORDER_OVERRIDES liczba[][] Lista zewnętrznych par wewnętrznych, które NIE wymagają nawiasów.
RESERVED_WORDS_ protected string, Rozdzielona przecinkami lista zarezerwowanych słów.
STATEMENT_PREFIX string | null Dowolny kod do wstrzyknięcia przed każdą instrukcją. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku instrukcji. Na przykład: highlight(%1);\n
STATEMENT_SUFFIX string | null Dowolny kod do wstrzyknięcia po każdej instrukcji. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku instrukcji. Na przykład: highlight(%1);\n

Metody

Metoda Modyfikatory Opis
addLoopTrap(branch, block) Dodaj pułapkę nieskończonej pętli na zawartość pętli. Dodaj sufiks instrukcji na początku bloku pętli (bezpośrednio po wykonaniu instrukcji pętli) i prefiks instrukcji na końcu bloku pętli (tuż przed wykonaniem instrukcji pętli).
addReservedWords(words) Dodaj co najmniej 1 słowo do listy zarezerwowanych słów w tym języku.
allNestedComments(block) Cyklicznie przesuwaj drzewo bloków, zwracając wszystkie komentarze.
blockToCode(block, opt_thisOnly) Wygeneruj kod określonego bloku (i dołączonych bloków). Przed wywołaniem tej funkcji generator musi się zainicjować.
finish(kod) Dodaj kod do uruchomienia na końcu jego generowania. Podklasy mogą to zastąpić, np. aby dołączyć wygenerowany kod instrukcjami importu lub definicjami zmiennych.
getProcedureName(name) Pobiera unikalną nazwę prawną dla procedury zdefiniowanej przez użytkownika. Przed wywołaniem tej metody właściwość nameDB_ klasy musi być już zainicjowana. Zwykle robi się to w funkcji init klasy generatora kodu.
getVariableName(nameOrId) Pobiera unikalną nazwę prawną zmiennej zdefiniowanej przez użytkownika. Przed wywołaniem tej metody właściwość nameDB_ klasy musi być już zainicjowana. Zwykle robi się to w funkcji init klasy generatora kodu.
init(_workspace) Dodaj kod do kodu, aby został uruchomiony przed rozpoczęciem jego generowania. Podklasy mogą to zastąpić, np. aby zainicjować bazę danych z nazwami zmiennych.
injectId(wiadomość, blokowanie) Wstaw w wiadomości identyfikator blokowania, aby zastąpić „%1”. Używana dla STATEMENT_PREFIX, STATEMENT_SUGGESTION i INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Do każdego wiersza kodu dodaj wspólny prefiks. Służy do dodawania wcięć kodu lub dodawania znaczników komentarzy.
provideFunction_(desiredName, code)

Zdefiniuj funkcję zdefiniowaną przez programistę (a nie procedurę zdefiniowaną przez użytkownika), która zostanie uwzględniona w wygenerowanym kodzie. Służy do tworzenia prywatnych funkcji pomocniczych. Przy pierwszym wywołaniu z określoną nazwą o określonej nazwie kod zostaje zapisany i generowana jest rzeczywista nazwa. Kolejne wywołania z tą samą wartością parametru o tej samej nazwie nie mają żadnego efektu, ale mają tę samą wartość zwrotną.

Od elementu wywołującego zależy to, czy ta sama wartość ({random) nie jest używana w różnych funkcjach pomocniczych (np. w funkcji „colourRandom” i „listRandom”, a nie na „losRandom”). Nie istnieje niebezpieczeństwo kolizji ze słowami zarezerwowanymi, zdefiniowanymi przez użytkownika nazwami zmiennych lub procedur.

Kod jest zwracany po wywołaniu funkcji CodeGenerator.finish().

scrub_(_block, code, _opt_thisOnly) Typowe zadania generowania kodu z bloków. Parametr ten jest wywoływany przez blockToCode, a także dla wszystkich bloków, a nie tylko bloków najwyższego poziomu. Podklasy mogą to zastąpić, np. w celu wygenerowania kodu dla instrukcji następujących po bloku lub do obsługi komentarzy dla określonego bloku i dowolnych połączonych bloków wartości.
scrubNakedValue(line) Wartości bez przedrostka www to bloki najwyższego poziomu z wyjściami, które nie są do niczego podłączone. W podklasach może to być zastąpienie, np. jeśli ich język nie zezwala na same wartości.
statementToCode(block, name) Wygeneruj ciąg kodu reprezentujący bloki dołączone do danych wejściowych o nazwanej instrukcji. Dodaj wcięcie kodu. Używa się go głównie w generatorach. Próbując wygenerować kod do oceny, sprawdź za pomocą workspaceToCode lub blockToCode.
valueToCode(block, name, outerOrder) Wygeneruj kod reprezentujący podaną wartość.
workspaceToCode(workspace) Wygeneruj kod dla wszystkich bloków w obszarze roboczym w wybranym języku.