OberonCore
https://forum.oberoncore.ru/

Новый компилятор
https://forum.oberoncore.ru/viewtopic.php?f=61&t=6363
Страница 3 из 4

Автор:  Comdiv [ Суббота, 09 Март, 2019 05:43 ]
Заголовок сообщения:  Re: Новый компилятор

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 явно лишний

Автор:  Artyemov [ Суббота, 09 Март, 2019 15:19 ]
Заголовок сообщения:  Re: Новый компилятор

Цитата:
Проще, чем с официальной документацией для Intel 64 и IA-32?

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

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

Автор:  Comdiv [ Суббота, 09 Март, 2019 17:08 ]
Заголовок сообщения:  Re: Новый компилятор

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

Автор:  Comdiv [ Суббота, 09 Март, 2019 17:12 ]
Заголовок сообщения:  Re: Новый компилятор

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

Автор:  Борис Рюмшин [ Суббота, 09 Март, 2019 18:01 ]
Заголовок сообщения:  Re: Новый компилятор

Comdiv писал(а):
Речь об этом документе - ftp://ftp.ethoberon.ethz.ch/Oberon/Ober ... aper.ps.gz ? Там всего 10 страниц

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

Автор:  Comdiv [ Суббота, 09 Март, 2019 18:21 ]
Заголовок сообщения:  Re: Новый компилятор

Эта? - Separate compilation and module extension

Автор:  Борис Рюмшин [ Суббота, 09 Март, 2019 22:31 ]
Заголовок сообщения:  Re: Новый компилятор

Ну это его дисер (есть на и сайте у нас https://oberoncore.ru/library/crelier_s ... _extension), а есть репорт: https://oberoncore.ru/library/op2_a_por ... 2_compiler

Автор:  kekc_leader [ Воскресенье, 10 Март, 2019 05:17 ]
Заголовок сообщения:  Re: Новый компилятор

Возможно я неточно выразился.
Проблема с документациями и справочниками по машинным кодам в том, что они изложение материала в них не идёт от простого к сложному. Возможно, так и должно быть, но такой книги, где указанный порядок присутствует, явно не хватает. Например, для простейшего компилятора многие машинные коды вовсе не нужны.

Автор:  Comdiv [ Воскресенье, 10 Март, 2019 15:37 ]
Заголовок сообщения:  Re: Новый компилятор

kekc_leader писал(а):
Проблема с документациями и справочниками по машинным кодам в том, что они изложение материала в них не идёт от простого к сложному.
Вряд ли это задача справочника, так как он предназначен для выборочного, а не последовательного чтения. Для таких задач, скорее, учебник искать надо.

Автор:  Artyemov [ Воскресенье, 10 Март, 2019 20:42 ]
Заголовок сообщения:  Re: Новый компилятор

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

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

Автор:  kekc_leader [ Понедельник, 11 Март, 2019 01:38 ]
Заголовок сообщения:  Re: Новый компилятор

Да, цели у справочника и у учебника разные. Наша цель — создать скорее учебник, чем справочник.

Автор:  kekc_leader [ Вторник, 02 Апрель, 2019 20:58 ]
Заголовок сообщения:  Re: Новый компилятор

Обновления по проекту разработки компилятора Оберона на 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;

Автор:  Kemet [ Среда, 03 Апрель, 2019 10:07 ]
Заголовок сообщения:  Re: Новый компилятор

Мне это так напоминает переписывание OP2, в котором без поллитры, такой-то матери и распечатанных таблиц перед глазами не разобраться. К слову, примерно так же написан современный freepascal - такая же маловразумительная каша внутри.

Автор:  Ярослав Романченко [ Среда, 03 Апрель, 2019 10:55 ]
Заголовок сообщения:  Re: Новый компилятор

Kemet писал(а):
маловразумительная каша внутри.
Но каша хорошо приправленная :)

Автор:  Kemet [ Среда, 03 Апрель, 2019 11:34 ]
Заголовок сообщения:  Re: Новый компилятор

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

Автор:  kekc_leader [ Среда, 03 Апрель, 2019 15:41 ]
Заголовок сообщения:  Re: Новый компилятор

Не могли бы вы указать место в коде, которое вам не понятно?

Автор:  kekc_leader [ Четверг, 04 Апрель, 2019 17:34 ]
Заголовок сообщения:  Re: Новый компилятор

Обновление по проекту (4 апреля 2019 г.)

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

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

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

kekc_leader писал(а):
Не могли бы вы указать место в коде, которое вам не понятно?

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

Автор:  kekc_leader [ Пятница, 05 Апрель, 2019 15:29 ]
Заголовок сообщения:  Re: Новый компилятор

Да, каталог не был добавлен по ошибке (неправильный файл «.gitignore»). Добавил.

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

Автор:  Comdiv [ Среда, 05 Июнь, 2019 16:36 ]
Заголовок сообщения:  Re: Новый компилятор

Последнее на данный час изменение в репозитории как и предыдущее сообщение датировано 5-м апреля. Разработчики взяли отпуск или перешли в закрытый режим разработки?

Страница 3 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/