Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Восток — транслятор Оберона-07 в Си
https://zx.oberon.org/forum/viewtopic.php?f=117&t=297
Страница 2 из 3

Автор:  Comdiv [ 13 янв 2018, 14:22 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

ivan_denisov писал(а):
Пересобрал исправленный вариант, вроде работает пример.
А как собрать без сервера? В README не хватает какого-то примера, как из терминала просто откомпилировать код на Oberon-07.

Сам транслятор выдаёт справку о способах использования, если его запустить без параметров или с командой help. Но Ваше замечание дельно, я не учёл желания многих увидеть примеры сразу в README, потому что сам я предпочитаю справку непосредственно по месту, а не в браузере.
Недавно я приступил к замене Makefile для сборки и тестирования на скрипт, написанный на самом же Обероне, поэтому, на самом деле, справка по сборке в README, в определённой степени, уже даёт представление о том как пользоваться транслятором.
Если Вы находитесь в корневом каталоге проекта, то так может выглядеть работа с ним:
Код: "OBERON"
  1. $ # Непосредственный запуск процедуры модуля:
  2. $ result/o7c run 'Out.String("Hello"); Out.Ln' -infr .
  3. $ # Сборка исполняемого файла:
  4. $ result/o7c to-bin 'Out.String("Hello"); Out.Ln' result/Hello -infr .
  5. $ result/Hello
  6.  

Автор:  Comdiv [ 13 янв 2018, 14:34 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

Comdiv писал(а):
Странно, что запуск сервера позволен только от root, ведь это нежелательное действие. Вы не Ubuntu используете?

У меня так же, просто я этого не замечал, всегда используя порт 8080, который доступен и без прав root.

Автор:  ivan_denisov [ 13 янв 2018, 18:31 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

Так и не понял всё равно
./o7c to-bin Hello.mod Hello -infr
Выдает ошибку Not enough count of arguments for command: to-bin
Как указать файл для компиляции?

Автор:  Comdiv [ 13 янв 2018, 22:12 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

Обратите внимание, что транслятор работает не с файлами, как это принято в языках, где понятие программы привязано к файлу, а с командами, состоящие из имени модуля, точки и имени процедуры как в ОС Оберон и ей подобных. Правда, я расширил понятие команды и позволил использовать как процедуры с параметрами, так и указывать только имя модуля, в случае чего будет выполнена только секция инициализации. Поэтому указывать имя файла бесполезно. Если модуль Hello не содержит экспортированную процедуру mod, то транслятор сообщит об ошибке. Для указанной Вами команды было сообщено о другой ошибке, потому что опция -infr требует указания пути к инфраструктуре. В моём примере это была малоприметная точка, что, естественно, означало текущий каталог.

Если же модуль Hello.mod с кодом в секции инициализации Вы положили в каталог result и оттуда хотите его собрать, то команда должна выглядеть так:
Код: "OBERON"
  1. $ ./o7c to-bin Hello Hello -infr .. -m .
Опция -m используется для указания пути для поиска модулей.

Спасибо Вам за деятельный интерес. Теперь я вижу, что если для человека, знакомого с Оберон, сборка показалась непонятной, то для стороннего человека это, наверно, тем более будет выглядеть дремучим лесом. Я постараюсь поправить справку.

Автор:  ivan_denisov [ 17 янв 2018, 07:48 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

Теперь получилось:
Код: "OBERON"
  1. ivan@dell:~/oberon/vostok-master/result$ ./o7c to-bin Hello Hello -infr .. -m .
  2. ivan@dell:~/oberon/vostok-master/result$ ./Hello
  3. Привет мир!!!
  4.  


Вот такой был модуль:
Код: "OBERON"
  1. MODULE Hello;
  2.  
  3. IMPORT Out;
  4.  
  5. BEGIN
  6. Out.String("Привет мир!!!"); Out.Ln;
  7. END Hello.
  8.  


Очень приятно, что поддерживается сразу корректная работа с Кириллицей.

немного неочевидное название для папки result, обычно называют bin

Автор:  ivan_denisov [ 17 янв 2018, 08:43 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

А какой формат ELF получается? 64-битный ?
Вроде вижу /lib64/ld-linux-x86-64.so.2

Автор:  Comdiv [ 17 янв 2018, 11:59 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

ivan_denisov писал(а):
Очень приятно, что поддерживается сразу корректная работа с Кириллицей.
С кириллицей работает только в строках, да и это лишь следствие всеобщего UTF-8 в GNU/Linux. Ничего специального я не делал. Иероглифы тоже поддерживаются.
ivan_denisov писал(а):
немного неочевидное название для папки result, обычно называют bin
Я давно перестал так называть, потому что в общем случае результат это не только двоичные данные. Да и двоичные данные могут быть исходным кодом, как известно. В слове result больше смысла в данном контексте.

Автор:  Comdiv [ 17 янв 2018, 12:05 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

ivan_denisov писал(а):
А какой формат ELF получается? 64-битный ?
Вроде вижу /lib64/ld-linux-x86-64.so.2
Для сборки используется компилятор Си. По умолчанию это 'сс -g -O1'. В 64-битной системе такая строка будет приводить к 64-битному исполняемому коду. Если транслятору o7c передать параметр -cc 'cc -m32', то на выходе будет 32-битный исполнимый код. Аналогично можно собрать под arm, к примеру.

Автор:  ivan_denisov [ 17 янв 2018, 14:21 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

А как собрать с помощью такого компилятора библиотеку? Можете сделать небольшой пример, пожалуйста.

Автор:  Comdiv [ 17 янв 2018, 16:07 ]
Заголовок сообщения:  Re: Восток — транслятор Оберона-07 в Си

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

Например, так:
Код: "BASH"
vostok $ mkdir result/Hello-с
vostok $ result/o7c to-c Hello result/Hello-с -infr . -m test/source
vostok $ cc -fPIC result/Hello-с/*.c singularity/implementation/*.c -Iresult/Hello-с -Isingularity/implementation -lm -shared -o result/libHello.so
 

Используем библиотеку:
Код: "C"
#include <o7.h>
#include "Hello.h"
 
int main(void) {
Hello_init();
Hello_Go();
return 0;
}

Код: "BASH"
vostok $ cc hello.c -lHello -lm -Lresult -Iresult/Hello-c -Isingularity/implementation -o result/hello
vostok $ LD_LIBRARY_PATH=result result/hello

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