Soy muy nuevo en el concepto de escribir un ensamblador e incluso después de leer una gran cantidad de material, sigo teniendo dificultades para entender un par de conceptos.Escribiendo un ensamblador Z80 - lexing ASM y construyendo un árbol de análisis mediante composición?
¿Cuál es el proceso para dividir realmente un archivo fuente en tokens? Creo que este proceso se llama lexing, y busqué un código real que tenga sentido, pero no encuentro nada. Ejemplos de código muy simples muy bienvenidos;)
Cuando se analiza, no ¿Alguna vez se debe pasar la información arriba o abajo del árbol? La razón que pido es el siguiente, tome:
LD BC, nn
Tiene que ser convertido en el siguiente árbol de análisis sintáctico vez tokens (???)
___ LD ___
| |
BC nn
Ahora , cuando se recorre este árbol que necesita para producir el siguiente código de máquina:
01 n n
Si la instrucción había sido:
LD DE,nn
A continuación, la salida tendría que ser:
11 n n
Lo que significa que plantea la pregunta, ¿el retorno LD nodo algo diferente basado en el operando o es el operando que devuelve algo? ¿Y cómo se logra esto? Los ejemplos de código más simples serían excelentes si el tiempo lo permite.
Estoy muy interesado en aprender algunos de los procesos en bruto aquí en lugar de mirar las herramientas avanzadas existentes así que tenlo en cuenta antes de enviarme a Yacc o Flex.
Esto estaba destinado a ser ilustrativo de los árboles que necesita construir, en lugar de coincidir con una instrumentación Z80 específica. Codifiqué MUCHOS ensambladores Z80 en la década de 1980; Es posible que sepa más sobre eso de lo que piensas. –
Luego demuestre su conocimiento. ¿Has escrito un ensamblador Z80? No lo he hecho, pero he escrito ensambladores 8080 y 6809, y su consejo me parece totalmente erróneo. –
Tu experiencia es probablemente diferente a la mía. He codificado ensambladores para la Collins 8311 (circa 1968), una máquina de 12 y 16 bits que no funcionaba comercialmente, por lo que no has oído hablar de ellos, los ensambladores de microcódigo y el ensamblador 6809 que viste en el otro mensaje. También he creado una variedad de interfaces para compiladores (mira mi información biográfica y el sitio web). Mis primeros ensambladores fueron construidos por medios ad hoc y funcionó. Cosas que construí desde los años 80 usando lexers y analizadores porque es mucho más fácil especificar, mantener, extender, lo que sea. –