User Tag List

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 33

Тема: Построение компилятора

  1. #11

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    приоритеты можешь не париться, надо просто правильно нарисовать правила для coco/r, он сам разберет по приоритетам сырок
    вот ключевые слова! Теперь до меня дошло, что сильно зависит от описания РБНФ, не только формальные конструкции, но и приоритет. Про приоритет я не думал. Поэтому лепил в одну кучу, например, все математические операции. Спасибо, ZEK!

    ---------- Post added at 21:00 ---------- Previous post was at 21:00 ----------

    Цитата Сообщение от psb Посмотреть сообщение
    самый быстрый путь в лоб - конвертить его в си, потом sdcc или iar
    да смысл. Я хочу оптимизированный именно для Спека, без посредников.

    ---------- Post added at 21:04 ---------- Previous post was at 21:00 ----------

    Цитата Сообщение от ZEK Посмотреть сообщение
    Приоритет формируется порядком вложенности одних лексем в другие
    !!!

  2. #12

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем, я решил всё сам написать с нуля. Т.к. на работе 7-я Винда, запароленный админом антивирь и другие админские ограничения не дают устанавливать и запускать проги (Coco/R даже через dosbox). Delphi только есть и EmuZWin.
    Уже лексический анализ написал. Зато всё своими руками, во всём сам разбираюсь, можно потом что угодно творить, вплоть до компиляции компилятора компилятором на реальный Спек.

  3. #13

    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,951
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    125 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я когда-то пытался написать компилятор Паскаль для платформы chip8, а потом и для chip16. На выходе оно давало ассемблерный файл, который компилился ассемблером под платформу. В целом - кое чего даже получилось, и были рабочие демки на этом паскале, типа треугольника Серпинского или простенький Мандельброт. Вот, к примеру, код мандельброта на моем паскале:
    Код:
    var
       xPixels, yPixels, xStart, yStart, Xsize, YSize, maxiter : integer;
       xStep, yStep : integer;
       ix,iy,x,y,x0,y0,iteration,xtemp : integer;
       dist : byte;
       temp : byte;
       xx,yy : byte;
    
    begin
      XPixels := 160;
      YPixels := 100;
      XStart := $FF9c;
      YStart := $FFce;
      XSize := 160;
      YSize := 100;
      MaxIter := 16;
    
      XStep := XSize div XPixels;
      YStep := YSize div YPixels;
    
      yy := 20;
      For iy := 0 to yPixels do
        begin
              xx := 0;
              For ix := 0 to xPixels do
                begin
                   x := xStart + ix * xStep;
                   y := yStart + iy * yStep;
                   x0 := x;
                   y0 := y;
                   iteration := 0;
                   Repeat
                         xtemp := ((x*x) div 48) - ((y*y) div 48) + x0;
                         y := 2*((x*y) div 48) + y0;
                         x := xtemp;
                         iteration := iteration + 1;
                         dist := ((x*x) div 48) + ((y*y) div 48);
                         If iteration = maxiter then dist := 4000;
                   Until dist > 192;
    
                   If iteration <> maxiter then
                    If iteration > 1 then
                    begin
                     temp := ((iteration shl 4) or iteration) shl 8;
                     temp := temp or ((iteration shl 4) or iteration);
                     DrawSprite(xx,yy,$0201,^temp);
                    end;
                   xx := xx + 2;
                end;
              yy := yy + 2;
        end;
    end.
    Картинка в эмуляторе:

    Скрытый текст



    [свернуть]


    Руководствовался я книгой Джека Креншоу: Давайте создадим компилятор! Это даже не совсем книга, это был цикл статей на английском в период 1988-1995 годов (Let's Build a Compiler, by Jack Crenshaw). Автор пишет простой компилятор паскаля на паскале для 68000. Все доступно и просто расписано, советую начинающим.

    Так же в инете я где-то нашел некий PowerPascal by Michael Warot, написанный явно по мотивам этих статей. Компилица Turbo Pascal, на выходе выдает x86 ассемблерный листинг. Его и переведенные статьи прилагаю в архиве на всякий случай.
    Последний раз редактировалось Tronix; 11.12.2013 в 23:36.

  4. #14

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо за наводку.
    Цитата Сообщение от Tronix Посмотреть сообщение
    Его и переведенные статьи прилагаю в архиве на всякий случай.
    Забыл наверно приложить файл

    Я по книге Вирта "Построение компилятора" ориентируюсь. У него, правда, Оберон - даже проще Паскаля. Но я еще более упрощаю - выкидываю некоторые команды, зато добавляю специфические для игрописания на Спектруме - вывод спрайтов, текста, возможно, хранение и вывод карт. Т.к. первый блин комом, пока делаю минимальную версию. Не стал делать универсальный файл с РБНФ, а сразу встраиваю синтаксический разбор в код компилятора.
    Короче, изобретение велосипеда в какой-то мере.
    Еще одна из целей - компиляция некоторых моих паскалевских программ для PC на Спектрум.
    Последний раз редактировалось Andrew771; 11.12.2013 в 10:25.

  5. #15

    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,951
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    125 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Забыл наверно приложить файл
    Не забыл, а не смог. Сейчас я без инета совсем. Еле еле удалось закачать сюда: http://rghost.ru/50882517 Как доберусь до инета, прикреплю к сообщению

  6. #16

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    зато добавляю специфические для игрописания на Спектруме - вывод спрайтов, текста, возможно, хранение и вывод карт.
    Позволь поинтересоваться, зачем нужно включение таких средств в сам язык программирования? Ведь все это сводится к вызову библиотечных процедур. Не будет же сам компилятор для каждого случая генерировать оптимизированный код для рисования спрайтов и т.п.?

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Позволь поинтересоваться, зачем нужно включение таких средств в сам язык программирования? Ведь все это сводится к вызову библиотечных процедур. Не будет же сам компилятор для каждого случая генерировать оптимизированный код для рисования спрайтов и т.п.?
    Библиотечные процедуры будут встроены в компилятор. Т.е., захотели вывести спрайт, завели переменную X типа sprite и вызываем вывод спрайта процедурой putsprite(X). Сам код процедуры один и тот же встроен будет мной. Потом можно напридумывать несколько разных видов процедур - вывод с атрибутами, вывод без атрибутов, познакоместно, попиксельно. Они все будут встроены изначально.

    ---------- Post added at 18:12 ---------- Previous post was at 18:10 ----------

    Короче, я делаю не просто универсальный Паскаль, это не интересно и уже есть, а адаптированный для написания игр на Спектруме.

  9. #18

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Помогите, пжт, с парой процедур. Они взяты из исходника компилятора для PC. Я хочу сконвертить на z80. Что они делают? По-моему, логический результат рассчитывают в зависимости от значения в регистре EAX, но что получают, не догоняю.
    1.
    Код:
    Logical
      NEG EAX
      MOV EAX,0
      SBC EAX,EAX
    2.
    Код:
    Logical_Not
      NEG EAX
      MOV EAX,-1
      ADC EAX,0

  10. #19

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    миль пардон, но где Вы их раскопали?оО

  11. #20

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,080
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    479
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Andrew771, наверное команда NEG устанавливает флаг переноса, в зависимости числа от знака в EAX.
    На выходе 0x00000000h или 0xFFFFFFFFh. Тока регистры 32-х разрядные.

    Logical:
    NEG
    SBC A,A

    Logical_Not:
    NEG
    CCF
    SBA A,A

    так?
    Последний раз редактировалось drbars; 30.04.2014 в 13:55.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Interference:построение таблицы
    от goblinish в разделе Программирование
    Ответов: 6
    Последнее: 17.11.2012, 13:43
  2. Кодогенерация SDCC: пожелания об улучшении компилятора
    от Oleg N. Cher в разделе Программирование
    Ответов: 99
    Последнее: 10.11.2012, 16:05
  3. 3D-View - построение 3D перспективы
    от Andrew771 в разделе Софт
    Ответов: 4
    Последнее: 02.11.2012, 11:46
  4. Конструктор для компилятора с Си
    от Raydac в разделе Программирование
    Ответов: 0
    Последнее: 21.12.2009, 23:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •