Come progetto breve durante la pausa invernale, sto cercando di implementare un linguaggio di programmazione chiamato Ax (progettato per la creazione di grafici di calcolatrici) utilizzando Python e PLY. Una breve nota: il linguaggio consente solo variabili globali e fa un uso intensivo dei puntatori.Implementazione goto in uno
Sto cercando di implementare goto in questa lingua, ma non ho idea di come farlo.
Il mio metodo generale è di usare PLY per analizzare il codice in un ast, quindi eseguirlo mentre procedo.
Ad esempio, l'istruzione
If 3
Disp 4
Disp 6
End
... sarebbe trasformato in ...
['PROGRAM',
['BLOCK',
['IF',
['CONDITION', 3],
['BLOCK',
['DISP', 4],
['DISP', 6]
]
]
]
]
... che vorrei eseguire in modo ricorsivo (ho aggiunto trattini per migliorare la leggibilità).
Poiché l'ast è un albero, non sono sicuro di come passare da un nodo all'altro. Ho preso in considerazione la possibilità di convertire l'albero in un array flat-ish ['IF', ['CONDITION', 3], ['DISP', 4], ['DISP', 6]]
in modo da poter utilizzare gli indici dell'array flat-ish per andare a specifiche linee nel codice, ma questo sembra mancare di una certa eleganza e sembra quasi un fare un passo indietro (anche se potrei sbagliarmi).
Ho visto this, ma non sono riuscito a capire come funzionava.
Qualsiasi aiuto o suggerimento sarebbe apprezzato.
"Salta"? Cosa pensi intendi per "Jump"? Perché dovresti "saltare" tra i nodi? Si prega di fornire un esempio specifico in cui si "salta" su un nodo arbitrario. È difficile trovare un bisogno ragionevole di un salto in un linguaggio basato sull'albero. –
La lingua che sto scegliendo di implementare contiene delle istruzioni goto. Volevo abbinare le specifiche, motivo per cui ho bisogno di goto. Ho fatto questo albero perché mi sembrava una cosa sensata da fare in quel momento. Immagino sia stato un errore: quali altre forme di linguaggio ci sono? – Michael0x2a
AX davvero * richiede * un GOTO? Sembra strano. Esiste un numero infinito di "forme" di lingue: procedurale, funzionale, ecc. Ecc. Tra i linguaggi procedurali, Python e Java (tra gli altri) non hanno GOTO. È una cosa piuttosto rara. –