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) => [stringa, numero] | stringa | null> | Un dizionario delle funzioni di generazione di blocchi, suddivise per tipo di blocco. Ogni funzione del generatore di blocchi prevede due parametri: - il blocco per cui generare il codice e - la chiamata all'istanza CodeGenerator (o sottoclasse), in modo che la funzione possa chiamare i metodi definiti di seguito (ad es. blockToCode) o nella sottoclasse pertinente (ad es. JavascripGenerator), e restituisce: - una tupla [codice, precedenza] (per blocchi valore/espressione) o - una stringa contenente il codice generato (per 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 utilizzando CodeGenerator.ProvideFunction_. Non deve essere un codice legale che potrebbe legittimamente apparire in una definizione di funzione (o un commento) e non deve confondere l'analizzatore sintattico delle espressioni regolari. | |
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). |
INDENTO | stringa | Il metodo di rientro. Il valore predefinito è due spazi, ma i generatori di lingue potrebbero prevalere su questa impostazione 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. Qualsiasi istanza di "%1" verrà sostituito dall'ID blocco non riuscito. Ad esempio checkTimeout(%1);\n |
|
isInitialized | boolean | null | 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 il flag non viene modificato, non avrà alcun effetto. | |
name_ | stringa | ||
nameDB_? | Nomi | (Facoltativo) Un database di nomi di variabili e procedure. | |
ORDER_OVERRIDES | numero[][] | Elenco di accoppiamenti interno-esterno 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à sostituito 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à sostituito dall'ID blocco dell'istruzione. Ad esempio highlight(%1);\n |
Metodi
Metodo | Modificatori | Descrizione |
---|---|---|
addLoopTrap(branch, block) | Aggiungi una trap di loop infinita ai contenuti di un loop. Aggiungi il suffisso dell'istruzione all'inizio del blocco loop (subito dopo l'esecuzione dell'istruzione loop) e un prefisso dell'istruzione alla fine del blocco 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) | Scansiona in modo ricorsivo un albero di blocchi, restituendo tutti i relativi commenti. | |
blockToCode(block, opt_thisOnly) | Genera il codice per il blocco specificato (e i blocchi collegati). Il generatore deve essere inizializzato prima di chiamare questa funzione. | |
finish(codice) | Hook per l'esecuzione del codice alla fine della generazione del codice. Le sottoclassi possono sostituirlo, ad esempio per anteporre al codice generato istruzioni di importazione o definizioni di variabili. | |
getProcedureName(name) | Restituisce 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) | 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 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 sostituirlo, ad esempio per inizializzare il database dei nomi delle variabili. | |
injectId(msg, blocco) | Inserisci un ID blocco in un messaggio per sostituire "%1". Utilizzato per STATEMENT_POINTS, STATEMENT_SUFFIX e INFINITE_LOOP_TRAP. | |
prefixLines(text, prefix) | Aggiungi un prefisso comune a ogni riga di codice. Destinato al rientro del codice o all'aggiunta di indicatori di commento. | |
fornireFunction_(nome desiderato, 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 chiamato con un determinato NameName, il codice viene salvato e viene generato un nome effettivo. Le chiamate successive con lo stesso valore desiderato non hanno effetto ma hanno lo stesso valore restituito. Spetta al chiamante assicurarsi che non venga utilizzato lo stesso prompt desiderato per funzioni helper diverse (ad es. utilizzare "colorRandom" e "listRandom", non "casuale"). Non c'è alcun pericolo di entrare in conflitto con parole riservate o con nomi di variabili o procedure definiti dall'utente. Il codice viene generato quando viene chiamato CodeGenerator.finish(). |
|
scrub_(_block, code, _opt_thisOnly) | Attività comuni per la generazione di codice dai blocchi. Questo viene chiamato da blockToCode e viene chiamato in ogni blocco, non solo in quelli di primo livello. Le sottoclassi possono sostituirlo, ad esempio 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 non collegati a nulla. Le sottoclassi possono sostituirlo, ad esempio se la lingua non consente valori semplici. | |
statementToCode(block, name) | Genera una stringa di codice che rappresenta i blocchi collegati all'input dell'istruzione con nome. Fai rientrare il codice. Viene utilizzato principalmente nei generatori. Durante il tentativo di generare codice per valutare l'uso 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 nella lingua specificata. |