User Tag List

Страница 4 из 18 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 213

Тема: Компилятор языка Паскаль - планы на будущее

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

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

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Да, вот именно так у меня и было. Работало. Но таким способом получается хороший код для простых процессоров, а, например, для x86 или ARM с их заковыристыми адресациями такой метод просто не видит операции, они "рассыпаются" в псевдокоде.
    Про x86 не знаю, не писал никогда на его асме. Возможно, определенные последовательности псевдокоманд можно объединять в одну команду асма x86.
    У меня сейчас в выражениях используется только двухбайтовое представление (через регистровую пару HL), даже если действия производятся над однобайтовыми значениями. Только чтение и запись значений производятся соответственно размерности. Здесь нужно делать еще один проход, чтобы определить максимальный используемый тип в сгенерированном выражении. В первой версии компиля пока не буду это оптимизировать.
    И еще индуктивность переменных тоже никак не учитываю. Так что, если встретится например:
    Код:
    for i:=1 to 100 do
    a[i]:=i;
    то на каждой итерации цикла будет рассчитываться заново адрес в памяти для ячейки a[i], хотя можно было всего лишь прибавить смещение к предыдущей ячейке. Здесь нужно уже анализировать весь поток от начала до конца цикла, а вдруг еще внутри есть другие циклы и ветвления. Пока не стал заморачиваться. А вот если эта же ячейка понадобится еще раз после, то уже возьмется запомненный ее адрес, это я сделал:
    Код:
    for i:=1 to 100 do
    begin
       a[i]:=i;
       b[i]:=i+1;
       if a[i]>b[i] then a[i]:=100;
    end;
    Ячейка a[i] только один раз будет рассчитываться.

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

  3. #2

    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Возможно, определенные последовательности псевдокоманд можно объединять в одну команду асма x86.
    Да, одной командой x86 можно объединить несколько простых псевдокоманд.
    Код:
    movswl EAX,[EBP+EDX*2+1200h]
    Вот такое чтение элемента массива размером 2 байта, номер которого в EDX, с одновременной конвертацией в longint с учётом знака. Сколько это команд на псевдокоде...?

  4. #3

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

    По умолчанию

    После оптимизации 4 штуки (два сложения, одно умножение и запись).
    Последний раз редактировалось Andrew771; 17.03.2015 в 10:53.

  5. #4

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    влезу немного сюда - не подкинет ли кто ссылочку на книжки какие-нибудь по написанию парсеров? мне не для языка или компилятора, хотя что-то похожее. просто конфиги получаются у меня навороченные, а парсер текущий - просто жуткая жуть. нужно какое-то более грамотное решение. заколебался уже с ними сидеть...
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  6. #5

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    влезу немного сюда - не подкинет ли кто ссылочку на книжки какие-нибудь по написанию парсеров? мне не для языка или компилятора, хотя что-то похожее. просто конфиги получаются у меня навороченные, а парсер текущий - просто жуткая жуть. нужно какое-то более грамотное решение. заколебался уже с ними сидеть...
    lex/yacc может быть? На них парсеры для чего угодно делали, от ЯВУ до игрушек диалоговых.
    Книжек про них не знаю, но статей прогугливается очень много.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  7. #6

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

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    по написанию парсеров?
    Попробуй GNU Bison. Бесплатно и сердито. Правда, я ни разу на нем ничего не делал, там надо осваивать, доки читать.
    Цитата Сообщение от Sayman Посмотреть сообщение
    просто конфиги получаются у меня навороченные,
    Для конфигов лучше всего задействовать стандартный формат типа XML или JSON. Парсеров полно, качай и пользуйся.

  8. #7

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Попробуй GNU Bison. Бесплатно и сердито. Правда, я ни разу на нем ничего не делал, там надо осваивать, доки читать.
    Бизон это и есть yacc, переписанный линупсовыми "улучшайзерами". В комплекте с бизоном обычно используют flex (аналог lex)
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  9. #8

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    надо было сразу пояснить видимо. я не использую сейчас кое-либо яву. конфиги которые нужно распарсить уже существуют в определённом формате в оригинале на ПЦ, а мне под спринтера нужно тоже самое. по сути, конфиги имеют вид стандартных ini файлов с секциями типа [section] и далее строки с параметрами. есть секции вида [sect type n], где n какое-то целое число. и т.д. нашёл несколько исходников ini парсеров. но они все , конечно, на си. уже глаза в кучу...
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  10. #9

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Наверняка ведь парсишь эти ini'шники в структуры. Напиши на PC утилиту, которая будет парсить их в двоичное представление этих структур, а в Спринтер загружай уже готовый к употреблению файл.

  11. #10

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

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    И еще индуктивность переменных тоже никак не учитываю. Так что, если встретится например:
    Код:
    for i:=1 to 100 do
    a[i]:=i;
    то на каждой итерации цикла будет рассчитываться заново адрес в памяти для ячейки a[i], хотя можно было всего лишь прибавить смещение к предыдущей ячейке. Здесь нужно уже анализировать весь поток от начала до конца цикла, а вдруг еще внутри есть другие циклы и ветвления. Пока не стал заморачиваться.
    Кстати, заметил в Delphi (в Паскале вроде нет), что внутри цикла for и даже внутри него во вложенных циклах запрещено изменять счетчик цикла. Т.е. получается, что компилятору проще оптимизировать индуктивные переменные (у нас a[i]), не надо анализировать изменение где-то глубоко внутри цикла счетчик i. Ну нинаю, изменение счетчика внутри цикла - дурной тон, но в принципе не должен быть запрещен, как и оператор goto. Ну просто иногда позарез надо его менять (или переходить), иначе логика получается навороченной с кучей условий со многими флагами. Я такое не запретил у себя. Пусть лучше компиль мучается с оптимизацией, чем программист на нем.

Страница 4 из 18 ПерваяПервая 12345678 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Пожелания и планы по эмулятору Башкирия-2М
    от b2m в разделе Эмуляторы отечественных компьютеров
    Ответов: 848
    Последнее: 30.10.2025, 20:37
  2. Пожелания и планы по эмулятору MESS
    от shattered в разделе Эмуляторы отечественных компьютеров
    Ответов: 57
    Последнее: 02.08.2017, 22:14
  3. Планы на новые создаваемые игры
    от TomCaT в разделе Игры
    Ответов: 67
    Последнее: 21.03.2012, 14:44
  4. Назад в будущее?
    от Sonic в разделе Оси
    Ответов: 27
    Последнее: 19.07.2005, 16:56

Ваши права

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