Open afgorbunov opened 5 years ago
Не найден модуль lib/Windows64/Console.ob07. Это пример для Win32, а Вы компилируете его с параметром console64.
Дело не в пути. компилятор на понятном английском написал:
гога 3:8 модуль нот фаунд.
Что в переводе на непонятный русский означает:
ошибка (строка 3, позиция 8) модуль не найден.
Склонен считать, что дело тут не столько в точке, сколько нужно смотреть код, и длина пути очень большая. Рекомендую пользоваться батником для сборки, с предварительной установкой путей через SET. Тогда путь к компилятору целиком указывать не надо. Только имя исполняемого файла. Если находиться в том же каталоге, что и исходник -- то и перед исходником никаких путей писать не надо. Вероятность ошибки меньше, где ошибка -- понятно лучше.
(строка 3, позиция 8)
А я так и не понял, что эти 3:8 означают! :)
Это пример для Win32
Да, для 32 скомпилировалось нормально. А в чем причина отсутствия модуля Console для 64?
В модуле HelloRus.ob07 (3-я строка, 8-й столбец) находится слово "Console" (IMPORT Console), а такого модуля нет. Причина отсутствия: мне не удалось вывести в консоль Win64 русский текст тем же способом, как и для Win32. Поэтому я отказался от разработки примеров для Win64.
Впрочем, оказалось, что и для Win32 вывод текста через функцию WriteConsoleW у меня сейчас не работает... А раньше работало. Пока не знаю в чем дело.
Да, на данный момент с компиляцией на 32 разрядную консоль получаю следующее:
C:\Users\af.gorbunov>C:\Users\af.gorbunov\Documents\programming\code\oberon\oberon-07-compiler\samples\Windows32\HelloRus.exe
ҟӀҸҲҵӂ!
ҟӀҵҲҵҴ!
Интересно. А я получаю ??????! ??????! Спасибо. Буду разбираться.
на всякий случай уточню, что система 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
Ошибка в компиляторе. Модуль STRINGS, процедура Utf8To16. Она рассчитана на 32-битную арифметику, а компилятор теперь 64-битный. Сейчас исправлю.
Всё работает. Теперь можно будет добавить модуль Console и примеры для Windows64.
Просто здорово!
Я планирую разбирать исходный крд вашего компилятора. Как с вами можно связаться помимо баг-репортов на гитхабе? Есть желание в будушем обсудить непонятные моменты, а подобным обсуждениям в багтрекере не место.
Я пользуюсь только мобильной связью, а также WhatsApp/Viber. Есть еще эл. почта для спама akron1_m@mail.ru. А с какой целью? Исходный код компилятора большой, сложный и недокументированный. Написан без опоры на традицию разработки оберон-компиляторов. Я не оберонщик, я -- компиляторщик, в некотором роде. Работы Н. Вирта и его последователей мне неинтересны. Интереснее самостоятельно находить решение. В результате -- необычная структура компилятора с линейным промежуточным кодом, местами неудовлетворительная кодогенерация, неудовлетворительная обработка ошибок компиляции (без восстановления, с остановкой на первой ошибке), некоторая переусложненность и др. Преимущество (пока не вполне раскрытое) -- относительная простота добавления новых бэк-эндов, но для этого необходимо хорошо документировать промежуточный код, а на это у меня нет мотивации. Сейчас разработка компилятора остановлена. Возможно, вернусь к этому позднее, когда будет время и желание. Но на вопросы и баг-репорты, по возможности, отвечу.
А что на счет пулл-реквестов? Примете, если появится возможность дополнить код?
Возможно, приму.
А куда подевался модуль "In" из Linux32\64 ?
А его никогда не было. Хотя, можно, конечно, сделать.
Вообще, In и Out надо будет переписать с использованием libc, а не делать свой велосипед с квадратными колесами. Эти два модуля достались в наследство от моего первого компилятора...
Просто возник вопрос ввода данных из консоли - а нечем... :-)
Я добавил модуль In в Linix32/64, а также переписал In и Out с использованием libc. Правда, для Linux мне не удалось задействовать безопасную функцию fgets для получения строки из консоли. Пока, пришлось использовать gets, но я сделал буфер на 10 кбайт, так что, если не нужна высокая надежность, использовать можно.
Спасибо!
при компиляции базового примера получаю следующую ошибку.
На сколько я понимаю, проблема может быть в том, что путь содержит точку. Так ли это?