Escrevendo um montador Z80 - lexando o ASM e construindo uma árvore de análise usando composição?

Sou muito novo no conceito de escrever um montador e, mesmo depois de ler uma grande quantidade de material, ainda estou tendo dificuldades em entender alguns conceitos.

Qual é o processo para realmente dividir um arquivo de origem em tokens? Eu acredito que este processo é chamado de lexing, e eu procurei alto e baixo por um código real exemplos que fazem sentido, mas não consigo encontrar uma coisa tão simples exemplos de código muito bem-vindos;)

Ao analisar, a informação precisa ser passada para cima ou para baixo na árvore? A razão que eu pergunto é a seguinte, tome:

LD BC, nn

Ele precisa ser transformado na seguinte árvore de análise uma vez tokenized (???)

  ___ LD ___
  |        |
 BC        nn

Agora, quando esta árvore é atravessada, ela precisa produzir o seguinte código de máquina:

01 n n

Se a instrução tivesse sido:

LD DE,nn

Então a saída precisaria ser:

11 n n

Isso significa que o nó LD retorna algo diferente com base no operando ou é o operando que retorna algo? E como isso é conseguido? Exemplos de código mais simples seriam excelentes se o tempo permitir.

Estou mais interessado em aprender alguns dos processos brutos aqui, em vez de olhar para as ferramentas existentes avançadas, por isso tenha isso em mente antes de me enviar paraYacc ouFlex.

questionAnswers(3)

yourAnswerToTheQuestion