blockly > CodeGenerator

Classe CodeGenerator

Classe per un generatore di codice che traduce i blocchi in un linguaggio.

Firma:

export declare class CodeGenerator 

Costruttori

Costruttore Modificatori Descrizione
(costruttore)(nome) Crea una nuova istanza della classe CodeGenerator

Proprietà

Proprietà Modificatori Tipo Descrizione
COMMENT_WRAP numero Lunghezza massima di un commento prima del wrapping. Non tiene conto del livello di rientro.
definitions_ protected { [key: string]: string; } Un dizionario delle definizioni da stampare prima del codice.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Un dizionario delle funzioni del generatore di blocchi, digitate per tipo di blocco. Ogni funzione del generatore di blocchi accetta due parametri:

- il blocco per cui generare il codice e - l'istanza di CodeGenerator (o sottoclasse) chiamante, in modo che la funzione possa chiamare i metodi definiti di seguito (ad es. blockToCode) o sulla sottoclasse pertinente (ad es. JavascripGenerator),

e restituisce:

- una tupla [codice, precedenza] (per i blocchi valore/espressione) oppure - una stringa contenente il codice generato (per i blocchi di istruzioni) oppure - null se non deve essere emesso alcun codice per il blocco.

FUNCTION_NAME_PLACEHOLDER_ stringa Viene utilizzato come segnaposto nelle funzioni definite mediante CodeGenerator.provideFunction_. Non deve essere codice legale che potrebbe legittimamente apparire nella definizione (o commento) di una funzione e non deve confondere l'analizzatore sintattico dell'espressione regolare.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } Un dizionario che mappa i nomi delle funzioni desiderate nelle definizioni_ ai nomi effettivi delle funzioni (per evitare collisioni con le funzioni utente).
INDENTE stringa Il metodo di rientro. Il valore predefinito è due spazi, ma i generatori di lingue potrebbero sostituirlo per aumentare il rientro o passare alle tabulazioni.
INFINITE_LOOP_TRAP stringa | null Codice arbitrario da inserire in località che rischiano di causare loop infiniti. Tutte le istanze di "%1" verranno sostituite dall'ID blocco non riuscito. Ad esempio checkTimeout(%1);\n
isInitialized boolean | null Indica se il metodo init è stato chiamato. I generatori che impostano questo flag su false dopo la creazione e su true in init faranno sì che blockToCode emetta un avviso se il generatore non è stato inizializzato. Se questo flag non viene toccato, non avrà alcun effetto.
name_ stringa
nameDB_? Nomi. (Facoltativo) Un database di nomi di variabili e procedure.
ORDER_OVERRIDES numero[][] Elenco di accoppiamenti esterno-interno che NON richiedono parentesi.
RESERVED_WORDS_ protected stringa Elenco separato da virgole di parole riservate.
STATEMENT_PREFIX stringa | null Codice arbitrario da inserire prima di ogni istruzione. Qualsiasi istanza di "%1" verrà sostituita dall'ID blocco dell'istruzione. Ad esempio highlight(%1);\n
STATEMENT_SUFFIX stringa | null Codice arbitrario da inserire dopo ogni istruzione. Qualsiasi istanza di "%1" verrà sostituita dall'ID blocco dell'istruzione. Ad esempio highlight(%1);\n

Metodi

Metodo Modificatori Descrizione
addLoopTrap(branch, block) Aggiungere una loop trap infinita ai contenuti di un loop. Aggiungi un suffisso dell'istruzione all'inizio del blocco di loop (subito dopo l'esecuzione dell'istruzione loop) e un prefisso di istruzione alla fine del blocco di loop (subito prima dell'esecuzione dell'istruzione di loop).
addReservedWords(words) Aggiungi una o più parole all'elenco delle parole riservate per questa lingua.
allNestedComments(block) Esegui il ragno ricorsivo di un albero di blocchi, restituendo tutti i suoi commenti.
blockToCode(block, opt_thisOnly) Genera il codice per il blocco specificato (e i blocchi associati). Il generatore deve essere inizializzato prima di chiamare questa funzione.
finish(codice) Hook per l'esecuzione del codice al termine della generazione del codice. Le sottoclassi possono sostituire questo valore, ad esempio anteponendo il codice generato alle istruzioni di importazione o alle definizioni delle variabili.
getProcedureName(name) Consente di ottenere un nome legale univoco per una procedura definita dall'utente. Prima di chiamare questo metodo, la proprietà nameDB_ della classe deve essere già stata inizializzata. Questa operazione viene in genere eseguita nella funzione init della classe del generatore di codice.
getVariableName(nameOrId) Restituisce un nome legale univoco per una variabile definita dall'utente. Prima di chiamare questo metodo, la proprietà nameDB_ della classe deve essere già stata inizializzata. Questa operazione viene in genere eseguita nella funzione init della classe del generatore di codice.
init(_workspace) hook per l'esecuzione del codice prima che inizi la generazione del codice. Le sottoclassi possono sostituire questo valore, ad esempio per inizializzare il database di nomi di variabili.
injectId(msg, blocco) Inserisci un ID blocco in un messaggio da sostituire "%1". Utilizzato per STATEMENT_PREFIX, STATEMENT_SUFFIX e INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Anteponi un prefisso comune a ogni riga di codice. Destinato al rientro del codice o all'aggiunta di indicatori di commento.
provideFunction_(desiredName; codice)

Definisci una funzione definita dallo sviluppatore (non una procedura definita dall'utente) da includere nel codice generato. Utilizzato per creare funzioni helper private. La prima volta che viene richiamata con un valore requestedName specificato, il codice viene salvato e viene generato un nome effettivo. Le chiamate successive con lo stesso wantName non hanno effetto, ma hanno lo stesso valore restituito.

Spetta al chiamante assicurarsi che lo stesso requestedName non venga utilizzato per diverse funzioni helper (ad esempio, usa "colourRandom" e "listRandom", non "random"). Non c'è pericolo di entrare in conflitto con parole riservate, nomi di variabili o procedure definiti dall'utente.

Quando viene chiamata CodeGenerator.finish(), il codice viene restituito.

scrub_(_block, codice, _opt_thisOnly) protected Attività comuni per generare codice da blocchi. Viene chiamato da blockToCode ed è eseguibile su ogni blocco, non solo su quelli di primo livello. Le sottoclassi possono sostituire questo comportamento, ad esempio per generare il codice per le istruzioni che seguono il blocco o per gestire i commenti per il blocco specificato e gli eventuali blocchi di valori collegati.
scrubNakedValue(line) I valori nudi sono blocchi di primo livello con output che non sono collegati a nulla. Le sottoclassi possono sostituire questo valore, ad esempio se la loro lingua non consente valori semplici.
statementToCode(block, name) Genera una stringa di codice che rappresenta i blocchi allegati all'input dell'istruzione denominata. Fai rientrare il codice. Viene utilizzato principalmente nei generatori. Quando provi a generare codice per valutare, esamina l'utilizzo di workspaceToCode o blockToCode.
valueToCode(block, name, outerOrder) Genera il codice che rappresenta l'input del valore specificato.
workspaceToCode(workspace) Genera il codice per tutti i blocchi nell'area di lavoro nel linguaggio specificato.