OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 16 Октябрь, 2019 01:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 05:43 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 909
Откуда: Киев
kekc_leader писал(а):
Спасибо. Да, с ARM всё гораздо проще.
Проще, чем с официальной документацией для Intel 64 и IA-32? Как же все остальные обходились с плохой документацией?
Кстати, странный псевдокод в официальном справочнике от Intel
Код:
IF SRC = 0
    THEN #DE; FI; (* Divide Error *)
IF OperandSize = 8 (* Word/Byte Operation *)
    THEN
        temp ← AX / SRC;
        IF temp > FFH
            THEN #DE; (* Divide error *)
        ELSE
            AL ← temp;
            AH ← AX MOD SRC;
        FI;
    ELSE IF OperandSize = 16 (* Doubleword/word operation *)
        THEN
            temp ← DX:AX / SRC;
            IF temp > FFFFH
                THEN #DE; (* Divide error *)
            ELSE
                AX ← temp;
                DX ← DX:AX MOD SRC;
            FI;
        FI;
    ELSE IF Operandsize = 32 (* Quadword/doubleword operation *)
        THEN
            temp ← EDX:EAX / SRC;
            IF temp > FFFFFFFFH
                THEN #DE; (* Divide error *)
            ELSE
                EAX ← temp;
                EDX ← EDX:EAX MOD SRC;
            FI;
        FI;
    ELSE IF 64-Bit Mode and Operandsize = 64 (* Doublequadword/quadword operation *)
        THEN
            temp ← RDX:RAX / SRC;
            IF temp > FFFFFFFFFFFFFFFFH
                THEN #DE; (* Divide error *)
            ELSE
                RAX ← temp;
                RDX ← RDX:RAX MOD SRC;
            FI;
        FI;
FI;
Вырвиглазные ключевые слова прописными буквами и комментарии, почему-то, не через две косые черты.
У ARM всё поприличней
Код:
if ConditionPassed() then
    EncodingSpecificOperations();
    if UInt(R[m]) == 0 then
        if IntegerZeroDivideTrappingEnabled() then
            GenerateIntegerZeroDivide();
        else
            result = 0;
    else
        result = RoundTowardsZero(UInt(R[n]) / UInt(R[m]));
    R[d] = result<31:0>;
Но тоже не хватает скобок вокруг условий после if и then явно лишний


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 15:19 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 337
Цитата:
Проще, чем с официальной документацией для Intel 64 и IA-32?

Доступность - может даже проще, у "интеля", не помню, c intel.com сразу и не найдёшь.
По объёмности - меньше. RISC же, хотя в последнее время (я так думаю, с v5) "reduced instruction set" становится совсем не"reduced".
Цитата:
Как же все остальные обходились с плохой документацией?

Она не "плохая" - она "своеобразная": всё равно лучше и полнее "автора" изложить предмет не сможет никто. С компилятором интеля кто-то может конкурировать? Если они используют ту же документацию что отдают, то вопрос о качестве документации отпадает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 17:08 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 909
Откуда: Киев
Пётр Кушнир писал(а):
Это неизвестно и непонятно, почему разработка нормального компилера с AST и сменными кодогенераторами по мотивам Compiler Construction должна привести к чему-то, отличному от OP2.Paper (кажется, так она называлась)?
Речь об этом документе - ftp://ftp.ethoberon.ethz.ch/Oberon/Ober ... aper.ps.gz ? Там всего 10 страниц


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 17:12 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 909
Откуда: Киев
Artyemov писал(а):
всё равно лучше и полнее "автора" изложить предмет не сможет никто
Смотря для каких целей. Вот kekc_leader посчитал, что для своих целей смог. Уже не терпится посмотреть, что же он подразумевал под хорошим всеобъемлющим справочником.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 18:01 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Comdiv писал(а):
Речь об этом документе - ftp://ftp.ethoberon.ethz.ch/Oberon/Ober ... aper.ps.gz ? Там всего 10 страниц

Это краткая статья. Есть ещё диссертация (или ETH-овский репорт). Там подробнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 18:21 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 909
Откуда: Киев
Эта? - Separate compilation and module extension


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Суббота, 09 Март, 2019 22:31 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4313
Откуда: Россия, Орёл
Ну это его дисер (есть на и сайте у нас https://oberoncore.ru/library/crelier_s ... _extension), а есть репорт: https://oberoncore.ru/library/op2_a_por ... 2_compiler


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Воскресенье, 10 Март, 2019 05:17 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 146
Откуда: г. Рига, Латвийская ССР
Возможно я неточно выразился.
Проблема с документациями и справочниками по машинным кодам в том, что они изложение материала в них не идёт от простого к сложному. Возможно, так и должно быть, но такой книги, где указанный порядок присутствует, явно не хватает. Например, для простейшего компилятора многие машинные коды вовсе не нужны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Воскресенье, 10 Март, 2019 15:37 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 909
Откуда: Киев
kekc_leader писал(а):
Проблема с документациями и справочниками по машинным кодам в том, что они изложение материала в них не идёт от простого к сложному.
Вряд ли это задача справочника, так как он предназначен для выборочного, а не последовательного чтения. Для таких задач, скорее, учебник искать надо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Воскресенье, 10 Март, 2019 20:42 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 337
Comdiv писал(а):
Artyemov писал(а):
всё равно лучше и полнее "автора" изложить предмет не сможет никто
Смотря для каких целей. Вот kekc_leader посчитал, что для своих целей смог. Уже не терпится посмотреть, что же он подразумевал под хорошим всеобъемлющим справочником.

Вообще-то, я речь вёл о том, что автор архитектуры (читай - "первоисточник") главный источник. А уж в нашем случае: персказ перевода на русский это чаще всего - беда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Понедельник, 11 Март, 2019 01:38 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 146
Откуда: г. Рига, Латвийская ССР
Да, цели у справочника и у учебника разные. Наша цель — создать скорее учебник, чем справочник.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Вторник, 02 Апрель, 2019 20:58 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 146
Откуда: г. Рига, Латвийская ССР
Обновления по проекту разработки компилятора Оберона на 2 апреля с. г.
  • Добавлены модули SymTable и Generator.
  • Модуль символьной таблицы содержит типы Object и Type, а также экспортированные процедуры NewObj и Init.
  • Модуль кодогенератора содержит только определение типа Item.
  • В модуле синтаксического анализатора (Parser) написать псевдокод считывания объявления переменных в процедуре Declarations.
  • Реализовано объявление переменных:
  • Написана процедура Parser.Declarations.
  • Добавлена процедура Parser.Type (пока хардкод).
  • Написана процедура SymTable.NewObj и диагнозтическая процедура SymTable.Display.
  • Исправлен синтаксический разбор модуля.
  • Добавлена процедура Generator.WriteDummy — создаёт исполнимый файл «Test» с простейшей программой, выводящей на экран «Hi!» (хардкод). Файл пока не работает, но и не вылетает с ошибкой.
  • Подключен модуль Chmod для того, чтобы отмечать файл как исполнимый.
Код компилятора можно посмотреть по адресу:
https://github.com/kekcleader/oberon

Желающие могут присоединиться к проекту!

Код обильно комментирован.
Фрагмент модуля Generator:
Код:
(* Выводит в файл заголовок ELF-файла *)
PROCEDURE WriteElfHeader;
BEGIN
  WriteElfIdent; (* Выводит первые 16 байтов *)
  Word(2); (* Тип файла: исполнимый файл (бывает ещё .o и .so) *)
  Word(3); (* Архитектура процессора: Intel 386 *)
  DWord(1); (* Версия ELF-файла (ещё раз) *)
  DWord(08040054H); (* Вход в программу. Виртуальный адрес начала исполнения *)
  DWord(52); (* Смещение на начало таблицы программных заголовков *)
  DWord(0); (* Смещение на начало таблицы секций (в исполнимом - не нужны) *)
  DWord(0); (* Флаги процессора (для Intel 386 отсутствуют) *)
  Word(52); (* Размер заголовка ELF-файла в байтах *)
  Word(32); (* Размер одного программного заголовка *)
  Word(1); (* Количество программных заголовков *)
  Word(0); (* Размер заголовка секции (в исполнимом файле они не нужны) *)
  Word(0); (* Количество заголовков секций *)
  Word(0) (* Номер секции с таблицей строк (в исполнимом файле не нужны) *)
END WriteElfHeader;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Среда, 03 Апрель, 2019 10:07 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Мне это так напоминает переписывание OP2, в котором без поллитры, такой-то матери и распечатанных таблиц перед глазами не разобраться. К слову, примерно так же написан современный freepascal - такая же маловразумительная каша внутри.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Среда, 03 Апрель, 2019 10:55 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1213
Откуда: Украина, Киев
Kemet писал(а):
маловразумительная каша внутри.
Но каша хорошо приправленная :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Среда, 03 Апрель, 2019 11:34 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Ярослав Романченко писал(а):
Но каша хорошо приправленная :)
Ну, как говорится, на вкус и цвет... Я когда-то пытался переписать эту кашу из фрипаскаля на активном обероне, и оно даже немного работало, по крайней мере получившаяся помойка из странного кода компилировала исходники самого фрипаскаля под win32 и с помощью этого получались иногда работающие бинарники. Но я уже где-то на середине понял о всей бесперспективности этой работы. В результате так оно и умерло не родившись. В общем-то туда ему и дорога. А вот потраченное время жалко, да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Среда, 03 Апрель, 2019 15:41 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 146
Откуда: г. Рига, Латвийская ССР
Не могли бы вы указать место в коде, которое вам не понятно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Четверг, 04 Апрель, 2019 17:34 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 146
Откуда: г. Рига, Латвийская ССР
Обновление по проекту (4 апреля 2019 г.)

Исправлена процедура WriteDummy, теперь она создаёт работающий исполнимый файл. Ошибки были в четырёх строчках, и были найдены и устранены за 10 минут. Создаётся файл «Test», который выводит на экран «Hi!». (Заголовки ELF-файла и машинный код выводит программа на Обероне.)

https://github.com/kekcleader/oberon/commit/fb0f1894fa8b2a15cb943c5568eb86eb6821ac14


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Пятница, 05 Апрель, 2019 13:50 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
kekc_leader писал(а):
Не могли бы вы указать место в коде, которое вам не понятно?

Папку chmod не находит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Пятница, 05 Апрель, 2019 15:29 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 146
Откуда: г. Рига, Латвийская ССР
Да, каталог не был добавлен по ошибке (неправильный файл «.gitignore»). Добавил.

Сообщите, получилось ли скомпилировать. Я могу помочь. По итогам я бы написал инструкцию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Новый компилятор
СообщениеДобавлено: Среда, 05 Июнь, 2019 16:36 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 909
Откуда: Киев
Последнее на данный час изменение в репозитории как и предыдущее сообщение датировано 5-м апреля. Разработчики взяли отпуск или перешли в закрытый режим разработки?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB