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 di definizioni da stampare prima del codice.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Dizionario delle funzioni del generatore di blocchi, specificate per tipo di blocco. Ogni funzione del generatore di blocchi richiede 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 nella relativa sottoclasse (ad es. JavascripGenerator),

e resi:

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

FUNCTION_NAME_PLACEHOLDER_ stringa Viene utilizzato come segnaposto nelle funzioni definite utilizzando CodeGenerator.provideFunction_. Non deve essere un codice legale che potrebbe legittimamente apparire in una definizione (o commento) di funzione e non deve confondere l'analizzatore sintattico di espressioni regolari.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } Un dizionario che mappa i nomi delle funzioni desiderati nelle definizioni_ ai nomi effettivi delle funzioni (per evitare conflitti 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 schede.
INFINITE_LOOP_TRAP stringa | null Codice arbitrario da inserire in località che rischiano di causare loop infiniti. 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 true in init faranno sì che blockToCode emetterà 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) Aggiungi un loop trap infinito 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 loop).
addReservedWords(words) Aggiungi una o più parole all'elenco delle parole riservate per questa lingua.
allNestedComments(block) ragno ricorsivamente un albero di blocchi restituendo tutti i suoi commenti.
blockToCode(block, opt_thisOnly) Genera il codice per il blocco specificato (e i blocchi allegati). 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 avere la precedenza su questo, ad esempio anteponendo il codice generato con istruzioni di importazione o definizioni di variabili.
getProcedureName(name) Recupera 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 generalmente eseguita nella funzione init della classe del generatore di codice.
getVariableName(nameOrId) Recupera 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 generalmente eseguita nella funzione init della classe del generatore di codice.
init(_workspace) Hook per l'esecuzione del codice prima dell'inizio della generazione del codice. Le sottoclassi possono sovrascrivere questo comando, ad esempio per inizializzare il database di nomi di variabili.
injectId(msg, blocco) Inserisci un ID blocco in un messaggio per sostituire "%1". Utilizzato per STATEMENT_PREFIX, STATEMENT_SUBMIT e INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Anteponi un prefisso comune a ogni riga di codice. Destinato per far rientrare il codice o aggiungere 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 la creazione di funzioni helper private. La prima volta che questo comando viene chiamato con un dato sameName, il codice viene salvato e viene generato un nome effettivo. Le chiamate successive con lo stesso sameName non hanno effetto, ma hanno lo stesso valore restituito.

Spetta al chiamante assicurarsi che lo stesso sameName non venga utilizzato per diverse funzioni helper (ad es. usare "colourRandom" e "listRandom", non "random"). Non c'è il rischio di entrare in conflitto con parole riservate, variabili definite dall'utente o nomi di procedure.

Il codice viene restituito quando viene chiamato CodeGenerator.finish().

scrub_(_block, codice, _opt_thisOnly) Attività comuni per generare codice dai blocchi. Questo viene chiamato da blockToCode ed è richiamato a ogni blocco, non solo a quelli di primo livello. Le sottoclassi possono avere la precedenza su questo, ad esempio per generare un 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 semplici sono blocchi di primo livello con output che non sono collegati a nessun elemento. Le sottoclassi possono avere la precedenza su questo, ad esempio se la loro lingua non consente valori vuoti.
statementToCode(block, name) Genera una stringa di codice che rappresenta i blocchi associati all'input dell'istruzione denominata. Fai rientrare il codice. Viene utilizzato principalmente nei generatori. Quando provi a generare il codice per valutare, guarda utilizzando 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.