Написание ассемблера Z80 - лексизация ASM и построение дерева разбора с использованием композиции?
Я очень плохо знаком с концепцией написания ассемблера, и даже после прочтения большого количества материала яЯ все еще испытываю трудности, оборачиваясь вокруг нескольких понятий.
Как происходит процесс разбиения исходного файла на токены? Я считаю, что этот процесс называется лексинг, и яя искал реальные примеры кода, которые имеют смысл, но я могуочень простые примеры кода приветствуются;)
При анализе нужно ли когда-либо передавать информацию вверх или вниз по дереву? Причина, по которой я спрашиваю, заключается в следующем:
LD BC, nn
Он должен быть превращен в следующее дерево разбора после токенизации (???)
___ LD ___
| |
BC nn
Теперь, когда это дерево пройдено, ему нужно создать следующий машинный код:
01 n n
Если инструкция была:
LD DE,nn
Тогда вывод должен быть:
11 n n
Это означает, что это поднимает вопрос, возвращает ли узел LD что-то другое в зависимости от операнда или это операнд, который возвращает что-то? И как это достигается? Более простые примеры кода были бы превосходны, если позволяет время.
Я больше всего заинтересован в изучении некоторых необработанных процессов здесь, а не в том, чтобы взглянуть на передовые существующие инструменты, поэтому, пожалуйста, имейте это в виду, прежде чем отправлять меня вYacc или жеFlex.