L'écriture d'un assembleur Z80 - lexing ASM et la construction d'une composition à l'aide arbre d'analyse syntaxique?

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

Question

Je suis très nouveau au concept d'écrire un assembleur et même après avoir lu beaucoup de matériel, je vais avoir encore des difficultés envelopper ma tête autour d'un couple de concepts.

  1. Quel est le processus de rompre réellement un fichier source en jetons? Je crois que ce processus est appelé lexing, et je l'ai cherché haut et bas pour un véritable exemples de code qui ont du sens, mais je ne peux pas trouver quelque chose des exemples de code si simple bienvenus;)

  2. Lors de l'analyse, l'information ne jamais besoin d'être transmis vers le haut ou vers le bas l'arbre? La raison pour laquelle je demande est la suivante, prendre:

    LD BC, nn

Il doit être transformé dans l'arbre Parse suivant une fois tokenized (???)

  ___ LD ___
  |        |
 BC        nn

Maintenant, quand cet arbre est traversé dont il a besoin pour produire le code de la machine suivante:

01 n n

Si l'instruction avait été:

LD DE,nn

Ensuite, la sortie devrait être:

11 n n

Ce qui signifie que la question se pose, ne le nœud LD retour quelque chose de différent en fonction de l'opérande ou est-ce l'opérande qui retourne quelque chose? Et comment y parvenir? exemples de code plus simple serait excellent si le temps le permet.

Je suis plus intéressé à apprendre certains des processus premières ici plutôt que de regarder les outils existants avancés afin s'il vous plaît garder cela à l'esprit avant de me envoyer à ou href="https://en.wikipedia.org/wiki/Flex_(lexical_analyser_generator)" rel="nofollow noreferrer"> Flex .

Était-ce utile?

La solution

Eh bien, la structure de l'arbre que vous voulez vraiment une instruction qui agit sur un registre et une mémoire mode d'adressage involing un déplacement de décalage et un registre d'index ressemblerait à ceci:

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

Et oui, vous voulez voulez transmettre des valeurs haut et en bas de l'arbre. Une méthode pour spécifier formellement comme le passage de valeur est appelée « Attribut » grammaires, et vous décorez la grammaire pour votre langauge (dans votre cas, votre syntaxe assembleur) avec la valeur passant et les calculs sur ces valeurs. Pour plus d'arrière-plan, voir Wikipédia sur Grammaires attribut .

vous avez demandé dans une question relative , je discutais un outil, DMS , qui gère les grammaires d'expression et d'arbres de construction. Comme outil de manipulation de la langue, DMS fait face à exactement ces mêmes vers le haut et vers le bas les informations d'arbre questions flux. Il ne devrait pas vous surprendre, que comme outil de manipulation linguistique haut de gamme, il peut gérer attribuer des calculs de grammaire directement.

Autres conseils

Il ne faut pas construire un arbre d'analyse syntaxique. Z80 codes op sont très simples. Ils se composent du code op et 0, 1 ou 2 opérandes, séparés par des virgules. Vous avez juste besoin de diviser l'opcode vers le haut dans les composants (maximum 3) avec un analyseur très simple - pas d'arbre est nécessaire

.

En fait, les opcodes ne sont pas une base d'octets, mais une base octal. La meilleure description que je sais est DÉCODAGE Z80 opcodes .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top