AntKrotov / oberon-07-compiler

Oberon-07 compiler for x64 (Windows, Linux), x86 (Windows, Linux, KolibriOS), MSP430x{1,2}xx, STM32 Cortex-M3
BSD 2-Clause "Simplified" License
61 stars 5 forks source link

Ошибка компиляции #9

Open afgorbunov opened 5 years ago

afgorbunov commented 5 years ago

при компиляции базового примера получаю следующую ошибку.

C:\Users\af.gorbunov\Documents\code\oberon\oberon-07-compiler>Compiler.exe "C:\Users\af.gorbunov\Documents\code\oberon\oberon-07-compiler\samples\Windows32\HelloRus.ob07" "C:\Users\af.gorbunov\Documents\code\oberon\oberon-07-compiler\samples\Windows32\HelloRus.exe" console64
compiling API (SYSTEM)
compiling RTL (SYSTEM)

  error (3:8) module not found
  file:  C:\Users\af.gorbunov\Documents\code\oberon\oberon-07-compiler\samples\Windows32\HelloRus.ob07

На сколько я понимаю, проблема может быть в том, что путь содержит точку. Так ли это?

AntKrotov commented 5 years ago

Не найден модуль lib/Windows64/Console.ob07. Это пример для Win32, а Вы компилируете его с параметром console64.

prospero78 commented 5 years ago

Дело не в пути. компилятор на понятном английском написал:

гога 3:8 модуль нот фаунд.

Что в переводе на непонятный русский означает:

ошибка (строка 3, позиция 8) модуль не найден.

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

afgorbunov commented 5 years ago

(строка 3, позиция 8)

А я так и не понял, что эти 3:8 означают! :)

Это пример для Win32

Да, для 32 скомпилировалось нормально. А в чем причина отсутствия модуля Console для 64?

AntKrotov commented 5 years ago

В модуле HelloRus.ob07 (3-я строка, 8-й столбец) находится слово "Console" (IMPORT Console), а такого модуля нет. Причина отсутствия: мне не удалось вывести в консоль Win64 русский текст тем же способом, как и для Win32. Поэтому я отказался от разработки примеров для Win64.

AntKrotov commented 5 years ago

Впрочем, оказалось, что и для Win32 вывод текста через функцию WriteConsoleW у меня сейчас не работает... А раньше работало. Пока не знаю в чем дело.

afgorbunov commented 5 years ago

Да, на данный момент с компиляцией на 32 разрядную консоль получаю следующее:

C:\Users\af.gorbunov>C:\Users\af.gorbunov\Documents\programming\code\oberon\oberon-07-compiler\samples\Windows32\HelloRus.exe
ҟӀҸҲҵӂ!
ҟӀҵҲҵҴ!
AntKrotov commented 5 years ago

Интересно. А я получаю ??????! ??????! Спасибо. Буду разбираться.

afgorbunov commented 5 years ago

на всякий случай уточню, что система 64 разрядная

Microsoft Windows [Version 10.0.14393]
(c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.

C:\Users\af.gorbunov>chcp
Текущая кодовая страница: 866

Смена кодовой страницы на 1251 не помогло

C:\Users\af.gorbunov>C:\Users\af.gorbunov\Documents\programming\code\oberon\oberon-07-compiler\samples\Windows32\HelloRus.exe
ҟӀҸҲҵӂ!
ҟӀҵҲҵҴ!

C:\Users\af.gorbunov>chcp
Текущая кодовая страница: 1251
AntKrotov commented 5 years ago

Ошибка в компиляторе. Модуль STRINGS, процедура Utf8To16. Она рассчитана на 32-битную арифметику, а компилятор теперь 64-битный. Сейчас исправлю.

AntKrotov commented 5 years ago

Всё работает. Теперь можно будет добавить модуль Console и примеры для Windows64.

afgorbunov commented 5 years ago

Просто здорово!

Я планирую разбирать исходный крд вашего компилятора. Как с вами можно связаться помимо баг-репортов на гитхабе? Есть желание в будушем обсудить непонятные моменты, а подобным обсуждениям в багтрекере не место.

AntKrotov commented 5 years ago

Я пользуюсь только мобильной связью, а также WhatsApp/Viber. Есть еще эл. почта для спама akron1_m@mail.ru. А с какой целью? Исходный код компилятора большой, сложный и недокументированный. Написан без опоры на традицию разработки оберон-компиляторов. Я не оберонщик, я -- компиляторщик, в некотором роде. Работы Н. Вирта и его последователей мне неинтересны. Интереснее самостоятельно находить решение. В результате -- необычная структура компилятора с линейным промежуточным кодом, местами неудовлетворительная кодогенерация, неудовлетворительная обработка ошибок компиляции (без восстановления, с остановкой на первой ошибке), некоторая переусложненность и др. Преимущество (пока не вполне раскрытое) -- относительная простота добавления новых бэк-эндов, но для этого необходимо хорошо документировать промежуточный код, а на это у меня нет мотивации. Сейчас разработка компилятора остановлена. Возможно, вернусь к этому позднее, когда будет время и желание. Но на вопросы и баг-репорты, по возможности, отвечу.

afgorbunov commented 5 years ago

А что на счет пулл-реквестов? Примете, если появится возможность дополнить код?

AntKrotov commented 5 years ago

Возможно, приму.

VadimAnIsaev commented 3 years ago

А куда подевался модуль "In" из Linux32\64 ?

AntKrotov commented 3 years ago

А его никогда не было. Хотя, можно, конечно, сделать.

AntKrotov commented 3 years ago

Вообще, In и Out надо будет переписать с использованием libc, а не делать свой велосипед с квадратными колесами. Эти два модуля достались в наследство от моего первого компилятора...

VadimAnIsaev commented 3 years ago

Просто возник вопрос ввода данных из консоли - а нечем... :-)

AntKrotov commented 3 years ago

Я добавил модуль In в Linix32/64, а также переписал In и Out с использованием libc. Правда, для Linux мне не удалось задействовать безопасную функцию fgets для получения строки из консоли. Пока, пришлось использовать gets, но я сделал буфер на 10 кбайт, так что, если не нужна высокая надежность, использовать можно.

VadimAnIsaev commented 3 years ago

Спасибо!