Так что я долго над этим размышлял, думал об этом.Сначала приведем пример кода, а затем я его объясню.
:main
dostuff
otherlabel
:otherlabel
dostuff
Хорошо, в этом примере main - это то место, откуда начинается код, и он «называет» метку «otherlabel».Это на самом деле просто ярлык для команды перехода, которая изменяет выполнение в другое место в памяти.Однако моя проблема в том, как мне обработать эти метки, чтобы их не нужно было объявлять до того, как они будут вызваны?
В данный момент я делаю одношаговую компиляцию, читая прямо из источника ивыводить байт-код.Я просто работаю с метками и добавляю их в словарь, когда нахожу их.И тогда я заменяю 'otherlabel' командой перехода в правильное место в коде.Но в этом случае этот код не будет компилироваться.
Я подумал о нескольких способах сделать это:
Первый - это обработка меток, прежде чем что-то еще, но это требует, чтобы я делал все вдва шага, и мне приходится иметь дело с одним и тем же кодом дважды, это замедляет процесс и выглядит просто как беспорядок.
Второй - это очереди вызовов меток, пока ПОСЛЕ того, как я прошёл весь файл и скомпилировалвсе остальное, а затем разбираться с ними, это выглядит намного чище.
Я пишу это на C, поэтому я бы предпочел не реализовывать сложные структуры данных, я ищу самый простой способ справиться с этим.