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. |