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, meinen Kopf um ein paar Konzepte zu wickeln.Einen Z80-Assembler schreiben - ASM lexieren und einen Parsing-Baum mithilfe der Komposition erstellen?
Was ist der Prozess, um eine Quelldatei tatsächlich in Token aufzuteilen? Ich glaube, dass dieser Prozess lexing genannt wird, und ich habe Hochs und Tiefs nach einem echten Code-Beispiele gesucht, die Sinn machen, aber ich kann nichts so einfach, Code-Beispiele sehr willkommen finden;)
Beim Parsen tut müssen Informationen jemals den Baum hinauf oder hinunter geführt werden? Der Grund, warum ich frage ist wie folgt nehmen:
LD BC, nn
Es muss in den folgenden Parsing-Baum einmal (???)
___ LD ___
| |
BC nn
Jetzt Token versehen gedreht werden Wenn dieser Baum durchquert wird, braucht es die folgenden Maschinencode zu erzeugen:
01 n n
Wenn der Befehl gewesen war:
LD DE,nn
Dann müsste der Ausgang sein:
11 n n
Was bedeutet, dass es die Frage aufwirft, ist die LD-Knoten Rückkehr etwas anderes auf der Grundlage der Operanden oder ist es die Operanden, 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 sich die fortgeschrittenen existierenden Werkzeuge anzuschauen. Bitte denken Sie daran, bevor Sie mich an Yacc oder Flex schicken.
Dies sollte veranschaulichen, welche Bäume er bauen muss, anstatt eine spezifische Z80-Instrumentierung zu finden. Ich habe in den 1980er Jahren eine Menge Z80-Assembler programmiert; Ich weiß vielleicht mehr darüber als du denkst. –
Dann demonstrieren Sie Ihr Wissen. Hast du einen Z80 Assembler geschrieben? Ich habe nicht, aber ich habe 8080 und 6809 Assembler geschrieben, und Ihr Rat scheint mir völlig falsch zu sein. –
Ihre Erfahrung ist wahrscheinlich anders als meine. Ich habe Assembler für die Collins 8311 (ca. 1968), eine 12- und 16-Bit-Maschine, die es nicht kommerziell gemacht hat, also nicht von ihnen gehört, Mikrocode-Assembler und den 6809-Assembler, den Sie in der anderen Nachricht gesehen haben. Ich habe auch eine Vielzahl von Compiler-Frontends gebaut (siehe meine Bioinformationen und Website). Meine frühen Monteure wurden mit Ad-hoc-Mitteln gebaut und arbeiteten. Stuff seit den 80er Jahren habe ich mit Lexer und Parsern gebaut, weil es viel einfacher zu spezifizieren, zu pflegen, zu erweitern, Sie nennen es. –