Escribir un ensamblador Z80 - ASM léxico y la construcción de un árbol de análisis se utilizó la composición?

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

Pregunta

Estoy muy nuevo en el concepto de escribir un ensamblador e incluso después de leer una gran cantidad de material, todavía estoy teniendo dificultades para envolver mi cabeza alrededor de un par de conceptos.

  1. ¿Cuál es el proceso de romper en realidad un archivo de origen en tokens? Creo que este proceso se denomina léxico, y he buscado alta y baja para una auténticos ejemplos de código que tienen sentido, pero no puedo encontrar una cosa tan simple ejemplos de código muy bienvenido;)

  2. Al analizar, no siempre tiene que ser pasado hacia arriba o hacia abajo el árbol de información? 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 se 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? Más ejemplos de código simple sería excelente si el tiempo lo permite.

Estoy más interesado en aprender algunos de los procesos primas aquí en vez de buscar las herramientas existentes avanzados así que tenga esto en cuenta antes de enviarme a o href="https://en.wikipedia.org/wiki/Flex_(lexical_analyser_generator)" rel="nofollow noreferrer"> Flex .

¿Fue útil?

Solución

Bueno, la estructura del árbol que realmente desea para una instrucción que opera en un registro y una memoria modo de direccionamiento involing un desplazamiento offset y un registro de índice sería el siguiente:

    INSTRUCTION-----+
    |      |        |
  OPCODE  REG     OPERAND
                  |     |
                OFFSET  INDEXREG

Y sí, que desea que desea pasar valores arriba y abajo del árbol. Un método para especificar formalmente tal paso valor se llama "Atribuir" gramáticas, y decorar la gramática para su langauge (en su caso, la sintaxis de ensamblador) con el valor de paso de y los cálculos más de esos valores. Para más antecedentes, ver de Wikipedia sobre las gramáticas de atributos .

En una pregunta relacionada le pedirá , discutí una herramienta, DMS , que se ocupa de las gramáticas de expresión y árboles de construcción. Como herramienta de manipulación del lenguaje, DMS se enfrenta exactamente estos mismos hacia arriba y hacia abajo la información fluye árbol cuestiones. No debe sorprender, que como una herramienta de manipulación de lenguaje de alto nivel, que puede manejar atribuir cálculos de gramática directamente.

Otros consejos

No es necesaria la construcción de un árbol de análisis. códigos op Z80 son muy simples. Consisten en el código op y 0, 1 o 2 operandos, separados por comas. Sólo tiene que dividir el código de operación arriba en el (máximo de 3) componentes con un programa de análisis muy simple - no se necesita ningún árbol

.

En realidad, los códigos de operación no tienen una base de bytes, pero una base octal. La mejor descripción que sé es DECODIFICACION Z80 códigos de operación .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top