Написание ASM на ассемблере Z80 с лексикой и построение дерева синтаксического анализа с использованием composition?

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

Вопрос

Я очень новичок в концепции написания ассемблера, и даже после прочтения большого количества материала мне все еще трудно разобраться в паре концепций.

  1. Каков процесс фактического разбиения исходного файла на токены?Я полагаю, что этот процесс называется lexing , и я искал повсюду реальные примеры кода, которые имеют смысл, но я ничего не могу найти, поэтому простые примеры кода очень приветствуются ;)

  2. Нужно ли когда-нибудь передавать информацию вверх или вниз по дереву при синтаксическом анализе?Причина, по которой я спрашиваю, заключается в следующем, возьмите:

    LD Британская Колумбия, nn

После токенизации его необходимо превратить в следующее дерево синтаксического анализа (???)

  ___ LD ___
  |        |
 BC        nn

Теперь, когда это дерево пройдено, ему необходимо создать следующий машинный код:

01 n n

Если бы инструкция была:

LD DE,nn

Тогда результат должен был бы быть:

11 n n

Это означает, что возникает вопрос, возвращает ли узел LD что-то другое на основе операнда или это операнд, который что-то возвращает?И как это достигается?Более простые примеры кода были бы превосходны, если позволит время.

Мне больше всего интересно изучить некоторые из приведенных здесь необработанных процессов, а не рассматривать продвинутые существующие инструменты, поэтому, пожалуйста, имейте это в виду, прежде чем отправлять меня на Yacc ( ЯКЦ ) или Гибкий.

Это было полезно?

Решение

Что ж, структура дерева, которая вам действительно нужна инструкция, которая работает с регистром и памятью режим адресации, включающий смещение смещения и регистр индекса будет выглядеть следующим образом:

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

И да, вы хотите передавать значения вверх и вниз по дереву.Метод для формального указания такой передачи значений называется "атрибутивные грамматики", и вы украшаете грамматику для вашего языка (в вашем случае, вашего синтаксиса ассемблера) передачей значений и вычисления над этими значениями.Для получения дополнительной информации смотрите Википедия об атрибутивных грамматиках.

В связанный с этим вопрос, который вы задали, я обсуждал инструмент, DMS, который обрабатывает грамматики выражений и деревья построения.Как инструмент для манипулирования языком, DMS сталкивается с точно такими же изменениями вверх-вниз проблемы с потоками информации в дереве.Это не должно вас удивлять, будучи высококлассным инструментом для манипулирования языком, он может обрабатывать вычисления грамматики атрибутов напрямую.

Другие советы

Нет необходимости создавать дерево синтаксического анализа.Операционные коды Z80 очень просты.Они состоят из операционного кода и 0, 1 или 2 операндов, разделенных запятыми.Вам просто нужно разбить код операции на (максимум 3) компонента с помощью очень простого анализатора - дерево не требуется.

На самом деле, коды операций имеют не байтовую базу, а восьмеричную.Лучшее описание, которое я знаю, это ДЕКОДИРОВАНИЕ КОДОВ ОПЕРАЦИЙ Z80.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top