Scrivi assembler Z80 - lexing ASM e la costruzione di un albero di analisi utilizzando la composizione?
-
19-09-2019 - |
Domanda
Sono molto nuovo al concetto di scrittura di un assemblatore e anche dopo aver letto una grande quantità di materiale, ancora sto avendo difficoltà confezionamento mia testa intorno a un paio di concetti.
-
Qual è il processo di rompere in realtà un file sorgente in token? Credo che questo processo è chiamato lexing, e ho cercato di alta e bassa per un vero e proprio esempi di codice che abbiano un senso, ma non riesco a trovare una cosa esempi di codice in modo semplice i benvenuti;)
-
Quando l'analisi, ha informazioni sempre bisogno di essere passato su o in giù l'albero? Il motivo che mi chiedo è il seguente, prendere:
LD aC, nn
Ha bisogno di essere trasformata nel seguente albero sintattico volta token (???)
___ LD ___
| |
BC nn
Ora, quando questo albero è attraversato di cui ha bisogno per produrre il seguente codice macchina:
01 n n
Se l'istruzione fosse stato:
LD DE,nn
L'uscita avrebbe bisogno di essere:
11 n n
Il che significa che si solleva la questione, non la LD ritorno nodo di qualcosa di diverso in base alla operando o è l'operando che restituisce qualcosa? E come si raggiunge questo obiettivo? Ulteriori esempi di codice semplici sarebbe eccellente se il tempo lo permette.
Sono più interessato a imparare alcuni dei processi prime qui piuttosto che guardare gli strumenti esistenti avanzati quindi si prega di tenere a mente prima di mandarmi a Yacc o Flex .
Soluzione
Bene, la struttura dell'albero che si vuole veramente per un'istruzione che opera su un registro e una memoria modalità di indirizzamento involing uno spostamento offset e un registro indice sarebbe simile a questa:
INSTRUCTION-----+
| | |
OPCODE REG OPERAND
| |
OFFSET INDEXREG
E sì, si desidera desidera passare valori su e giù per l'albero. Un metodo per specificare formalmente tale passaggio valore viene chiamato "Grammatica ad attributi", e si decorare la grammatica per la vostra langauge (nel tuo caso, la sintassi assembler) con il valore-passing ed i calcoli su tali valori. Per più di fondo, vedi Wikipedia sulla grammatica ad attributi .
In una domanda correlate hai chiesto , ho discusso un strumento, DMS , che gestisce grammatiche espressione e la costruzione degli alberi. Come strumento di manipolazione lingua, DMS affronta esattamente questi stessi up-and-down le informazioni albero flussi di problemi. Non dovrebbe sorprendere, che come strumento di manipolazione linguaggio di fascia alta, in grado di gestire attribuire direttamente i calcoli di grammatica.
Altri suggerimenti
Non è necessario costruire un albero sintattico. Z80 codici operativi sono molto semplici. Essi consistono del codice op e 0, 1 o 2 operandi, separate da virgole. Hai solo bisogno di dividere il codice operativo fino in (massimo 3) i componenti con un semplice parser - non è necessario alcun albero
.In realtà, i codici operativi non hanno una base di byte, ma una base ottale. La migliore descrizione che conosco è DECODIFICA Z80 codici operativi .