Scrivi assembler Z80 - lexing ASM e la costruzione di un albero di analisi utilizzando la composizione?

StackOverflow https://stackoverflow.com/questions/1305091

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.

  1. 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;)

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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top