blockly > CodeGenerator

Klasa CodeGenerator

Klasa na temat generatora kodu tłumaczącego bloki 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 pakowaniem. Nie uwzględnia poziomu wcięcia.
definitions_ protected { [klucz: ciąg]: ciąg; } Słownik definicji do wydrukowania przed kodem.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

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

– blok do generowania kodu dla instancji CodeGenerator (lub podklasa), aby funkcja mogła wywoływać metody zdefiniowane poniżej (np. blockToCode) albo w odpowiedniej podklasie (np. JavascripGenerator),

i zwraca:

– krotkę [kod, pierwszeństwo] (dla bloków wartości/wyrażeń) lub - ciąg tekstowy zawierający wygenerowany kod (w przypadku bloków instrukcji) albo - null, jeśli do bloku nie powinien zostać wysłany żaden kod.

FUNCTION_NAME_PLACEHOLDER_ ciąg znaków Jest on używany jako symbol zastępczy w funkcjach zdefiniowanych za pomocą CodeGenerator.provideFunction_. Nie może to być kod prawny, który zgodnie z prawem może się pojawiać w definicji funkcji (lub komentarza) i nie może mylić parsera wyrażeń regularnych.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [klucz: ciąg]: ciąg; } Słownik mapujący wybrane nazwy funkcji w definicjach_ na rzeczywiste nazwy funkcji (aby uniknąć kolizji z funkcjami użytkownika).
CZĘSTOTLIWOŚĆ PUBLIKOWANIA ciąg znaków Metoda wcięcia. Domyślnie są to 2 spacje, ale generatory języków mogą je zastąpić, aby zwiększyć wcięcie lub zmienić znaki tabulacji.
INFINITE_LOOP_TRAP string | null Dowolny kod do wstrzyknięcia w miejsca, które mogą spowodować zapętlenie. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku, który nie zadziałał. Na przykład: checkTimeout(%1);\n
isInitialized boolean | null Określa, czy metoda init została wywołana. Generatory, które po utworzeniu ustawią tę flagę na false, i true w init, spowodują wygenerowanie ostrzeżenia blockToCode, jeśli generator nie został zainicjowany. Jeśli ta flaga nie zostanie zmieniona, nie spowoduje to żadnych zmian.
name_ ciąg znaków
nameDB_? Nazwy (Opcjonalnie) Baza danych zawierająca nazwy zmiennych i procedur.
ORDER_OVERRIDES liczba[][] Lista par zewnętrznych wewnętrznych, które NIE wymagają nawiasów.
RESERVED_WORDS_ protected ciąg znaków 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 (zaraz 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 słów zarezerwowanych w tym języku.
allNestedComments(block) Powtarzające się przewijanie drzewa bloków zwracające wszystkie komentarze.
blockToCode(block, opt_thisOnly) Wygeneruj kod określonego bloku (i dołączonych bloków). Przed wywołaniem tej funkcji generator musi zostać zainicjowany.
finish(code) Aktywuj kod, aby go uruchomić na końcu jego generowania. Podklasy mogą to zastąpić, np. aby poprzedzić wygenerowany kod instrukcjami importu lub definicjami zmiennych.
getProcedureName(name) Pobiera unikalną nazwę prawną procedury zdefiniowanej przez użytkownika. Przed wywołaniem tej metody właściwość nameDB_ klasy musi być już zainicjowana. Zwykle wykonuje 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 wykonuje się to w funkcji init klasy generatora kodu.
init(_workspace) Uruchamianie kodu przed rozpoczęciem jego generowania. To ustawienie może zastąpić podklasy, np. w celu zainicjowania bazy danych z nazwami zmiennych.
injectId(wiadomość, blokowanie) Wstaw w wiadomości identyfikator bloku, aby zastąpić ciąg „%1”. Używana w przypadku STATEMENT_PREFIX, STATEMENT_SUFFIX 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, kod)

Zdefiniuj funkcję zdefiniowaną przez programistę (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 wybranej nazwie kod zostaje zapisany i generowana jest rzeczywista nazwa. Kolejne wywołania z tą samą wartością o tej samej nazwie nie mają żadnego efektu, ale mają tę samą wartość zwracaną.

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

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

scrub_(_block, code, _opt_thisOnly) protected Typowe zadania generowania kodu z bloków. Jest ona wywoływana z pole blockToCode i wywoływana w przypadku każdego bloku, a nie tylko bloków najwyższego poziomu. Podklasy mogą to zastąpić, np. w celu generowania kodu dla instrukcji następujących po bloku lub obsługi komentarzy dla określonego bloku i wszelkich połączonych bloków wartości.
scrubNakedValue(line) Bezwartościowe wartości to bloki najwyższego poziomu z wyjściami, które nie są do niczego podłączone. Podklasy mogą zastąpić to ustawienie, 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 instrukcji. Dodaj wcięcie kodu. Używa się go głównie w generatorach. Gdy próbujesz wygenerować kod do oceny, sprawdź to 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 na wybrany język.