Einen Z80-Assembler schreiben - ASM lexen und einen Parsing-Baum mithilfe der Komposition erstellen?

8

Ich bin sehr neu in dem Konzept, einen Assembler zu schreiben, und selbst nachdem ich eine Menge Material gelesen habe, habe ich immer noch Schwierigkeiten, mir ein paar Konzepte zu überlegen.

  1. Was ist der Prozess, um eine Quelldatei in Token zu zerlegen? Ich glaube, dieser Prozess heißt Lexing, und ich habe hoch und tief nach einem echten Code gesucht, der Sinn ergibt, aber ich finde nichts so einfaches Code-Beispiele sehr willkommen;)

  2. Muss die Information beim Parsen jemals in der Baumstruktur nach oben oder nach unten weitergegeben werden? Der Grund, den ich frage, ist wie folgt:

    LD BC, nn

Es muss in den folgenden Syntaxbaum umgewandelt werden, sobald es in Token umgewandelt wurde (???)

%Vor%

Wenn dieser Baum durchlaufen wird, muss er nun den folgenden Maschinencode erzeugen:

%Vor%

Wenn die Anweisung gewesen wäre:

%Vor%

Dann müsste die Ausgabe sein:

%Vor%

Bedeutet, dass es die Frage aufwirft, gibt der LD-Knoten basierend auf dem Operanden etwas anderes zurück oder ist es der Operand, der etwas zurückgibt? Und wie wird das erreicht? Einfachere Codebeispiele wären hervorragend, wenn es die Zeit erlaubt.

Ich bin am meisten daran interessiert, einige der rohen Prozesse hier zu lernen, anstatt fortgeschrittene fortgeschrittene Werkzeuge zu betrachten. Bitte denken Sie daran, bevor Sie mich zu Yacc oder Flex .

    
Gary Paluk 20.08.2009, 09:50
quelle

3 Antworten

8

Nun, die Struktur des Baumes, für den du dich wirklich interessierst eine Anweisung, die auf einem Register und einem Speicher arbeitet Adressierungsmodus, der eine Offsetverschiebung und ein Indexregister enthält würde so aussehen:

%Vor%

Und ja, Sie möchten Werte auf und ab in den Baum übertragen. Es wird eine Methode zum formellen Angeben einer solchen Wertübergabe aufgerufen "Attribut Grammatiken", und Sie schmücken die Grammatik für Ihre langauge (in Ihrem Fall, Ihre Assembler-Syntax) mit der Wertübergabe und die Berechnungen über diese Werte. Für mehr Hintergrund, siehe Wikipedia über Attributgrammatiken .

In einer verwandten Frage, die Sie gestellt haben Ich diskutierte ein Werkzeug, DMS , welches die Expressionsgrammatiken und Baumstrukturen behandelt. Wie Sprachmanipulations-Tool, DMS Gesichter genau das gleiche up-and-down Die Bauminformationen fließen Probleme. Es sollte dich nicht überraschen, das als High-End-Sprachmanipulationswerkzeug kann es handhaben Grammatikberechnungen direkt zuordnen.

    
Ira Baxter 23.08.2009, 20:27
quelle
5

Es ist nicht notwendig, einen Syntaxbaum zu erstellen. Z80 Op-Codes sind sehr einfach. Sie bestehen aus dem Op-Code und 0, 1 oder 2 Operanden, getrennt durch Kommas. Sie müssen nur den Opcode in die (maximal 3) Komponenten mit einem sehr einfachen Parser aufteilen - es wird kein Baum benötigt.

    
anon 20.08.2009 09:54
quelle
3

Tatsächlich haben die Opcodes keine Byte-Basis, sondern eine oktale Basis. Die beste Beschreibung, die ich kenne, ist DECODING Z80 OPCODES .

    
user177949 26.10.2009 00:49
quelle