Программы
ВХОД
Логин:    

Пароль:  

   Запомнить меня
Вам нужно авторизоваться.
Забыли пароль? / Регистрация
Статьи


   Статьи
   Soft
   Программирование
   Работа компилятора в картинках. Часть седьмая

Работа компилятора в картинках. Часть седьмая

Добавлено: 30.06.2012

Прочитано: 1476

Кстати, после них, если не произойдет чего-то экстраординарного, мы найдем время поговорить и о данных: в них спрятаны настоящие жемчужины, связанные с упаковкой структур и данных. Тем более, что жить нам приходится в эпоху, когда все переводится «в цифру», а разбираться в них хочется. Предыдущие наши статьи нельзя назвать особо глубоким погружением в проблемы, зато по верхам мы насшибали очень много интересных тем, которые вы можете углубить для себя самостоятельно. Можете верить или не верить, но все это называется системным программированием, и программисты, владеющие им, никогда без заработка не останутся. А пока вернемся к нашим компиляторам. В прошлой статье мы закончили говорить о структуре PE, являющейся типовым заголовком всех Windows программ, а также драйверов и других запускаемых служб. О долгах по программам тоже не забудем: немного исследовав рынок готовых редакторов ресурсов, мы увидели, что стоимость таких программ уходит далеко за сотню долларов – может, удастся сэкономить.

А теперь поговорим немного о машинных кодах, ассемблере и прочих занимательных вещах, ведь обрабатывать данные интереснее, чем проектировать структуры. В любом случае, самостоятельно написанный проект будет гораздо более ценным обретением, чем чтение десятка книг по теории компиляторов. Уже обладая некоторыми сведениями, как бы вы, к примеру, решили реализовать свой простейший вариант, скажем… Бейсика? При условии, что программировать можно на любом языке? Вспомним еще раз самый примитивный диалект:

  1. Есть данные, записанные в DATA, которые можно читать поочередно, а затем сбрасывать указатель чтения на начало.
  2. Есть операторы ветвления программы: GOTO, IF, WHILE и прочие.
  3. Есть подпрограммы, отделенные от основной программы оператором END и заключенные в скобках SUBROUTINE … RETURN.
  4. Есть логические и арифметические выражения в операторах.
  5. Есть стандартные функции.
  6. Есть служебные команды, которые не включаются в язык: LOAD, LIST, RUN, TRON/TROFF, SYSTEM и т.д.
  7. Есть набор переменных, которые не нужно заранее объявлять. Кстати, в таких вот лабораторных проектах именам переменных часто разрешают использовать только один символ – а знаете почему? Да просто так легче хранить всю структуру данных!*

* Примечание:
К примеру, набор из 27 переменных можно привязать к массиву:
Var m: [‘A’..’Z’] of integer;
И присвоение переменной C:=200 будет выглядеть как m[C]:=200, что очень легко переложить в код, зная размеры каждого элемента и смещения. Но ведь в Бейсике нужно еще предусмотреть инициализацию переменных, а также то, что оператор может быть перегружен данными другого типа, т.е.

Print c
0
c:=200
Print c
200
c:=’Строка’
Print c

Строка

Как-то так.
Тогда можно заранее чистить массив (инициализировать его), а вот объявление придется расширить:

Var
M: array [‘A’..’Z’] of record
Ctype: byte; {текущее значение переменной по номеру}
BOOL: boolean; {1}
D8: byte; {2}
D16: word; {3}
D32: longint; {4}
R: real; {5}
S: string; {6}
End;

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



обновить программы бесплатно

<<  Работа компилятора в картинках. Часть шестая Работа компилятора в картинках. Часть восьмая  >>


Добавить Комментарий

Скачать программу для проверки на ошибки
Скачать программу автоматического обновления программ
Статьи
Новые Программы
Новые статьи
Популярные Программы
Самые читаемые статьи
Copyright © Дай Прогу 2011 Контакты ¤ Статистика