OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 08 Декабрь, 2019 22:16

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




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Четверг, 22 Апрель, 2010 16:14 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Появилась одна идея использования "Рокот". :idea:
На мой взгляд, была бы интересна трансляция программ, написанных на языке MATLAB в язык Оберон. Такой результат работы, пожалуй, будет полезен многим. Хотя бы тем, кто имеет алгоритм работы в Матлабе и хочет реализовать его на некотором языке, получая на выходе некоторый компонент-библиотеку.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 22 Апрель, 2010 18:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Тут Рокот сам по себе неважен.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Апрель, 2010 04:54 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Идея меня не вдохновляет. Нужно думать на Обероне, а не просто переписывать на него программы с других языков. MATLAB уже не исправить, разве что переписать заново.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Апрель, 2010 08:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Не могу судить.

Там так запущено всё, да? :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Апрель, 2010 09:00 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Кстати, в матлабовском симулинке функции можно писать на разных языках, в том числе на Аде. Но там всё строго по шаблону. Фактически нужно написать заранее придуманные разработчиками MATLAB "заклинания", кое-где подставив свои параметры. Шаг вправо, шаг влево - растрел!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Апрель, 2010 09:12 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Илья Ермаков писал(а):
Там так запущено всё, да? :)
Так называемые М-файлы пишут на языке MATLAB. После Оберонов "не возбуждает" :) . Для математических приложений это без сомнения мощный инструмент. Хотя несколько тормозёвый. Как зависнет, выдаёт окно с фирменным логотипом Java :) . Много специализированных функций. Частенько использую для моделирования, для расчета коэффициентов цифровых фильтров и т. д..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 10 Сентябрь, 2010 13:57 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Извиняюсь, если не в тему или давно известно…

Ещё есть такое применение Рефала.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 07:38 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Можно кратко, чем отличается Рефал-0 от Базисного Рефала и от Полного Рефала (Рефал-5)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 10:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Я не помню точно, чем именно шире те Рефалы, чем мой.
У меня самый минимум для работы на двух стеках символов без динамической памяти и рантайма.
Поэтому отсутствуют древовидные списки - "изюминка" Рефала.
Ну и всё прочее...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 11:16 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Я не помню точно, чем именно шире те Рефалы, чем мой.
У меня самый минимум для работы на двух стеках символов без динамической памяти и рантайма.
Поэтому отсутствуют древовидные списки - "изюминка" Рефала.
Ну и всё прочее...

Т.е. скобочек нет?
Зато синтаксический сахар из полного рефала присутствует. Это хорошо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 16:09 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
А что Вы имеете в виду под синт. сахаром?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 16:17 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
А что Вы имеете в виду под синт. сахаром?

То чего нет в базисном рефале, но есть в полном рефале (кроме разве что закапывания-выкапывания переменной, да и то...). Потому как семантически они (базисный и полный рефал) эквиваленты. Эти конструкции просто добавляют удобство -- код становится компактней.

Ну, например where конструкция.
У вас это называется "Образцы с условиями":
Код:
Identifier {
    s1 eIdent s2 e3, <IsFirstIdentChar s1>: 'T', <IsIdentChar s2>: 'F' = <EmitIdent s1 eIdent> s2 e3
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 17:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Ещё одно ограничение - только одна e-переменная в образце. Для того, чтобы сделать возможным безоткатное сопоставление (тупой линейный поиск).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 17:36 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Ещё одно ограничение - только одна e-переменная в образце. Для того, чтобы сделать возможным безоткатное сопоставление (тупой линейный поиск).

Стоп. А разве в коде процитированном выше вот тут:
Код:
s1 eIdent s2 e3

в образце не две e-переменные (eIdent, e3)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Декабрь, 2010 18:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Пардон. До двух e-переменных, конечно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 07 Июль, 2011 12:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
http://oberoncore.ru/bbcc/subs/rocot/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 19 Апрель, 2014 23:34 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2636
Откуда: Россия, Ярославль
Пробую тут компонент генерации кода из рефала.
Код:
MODULE PrivRefal0;
   
   IMPORT
      Log;
(*
   RocotLangCells.Compile
*)

RocotRefal0;
   Palindrom {
     s1 e2 s1 = <Palindrom e2> ;
     s1 = 'T';
     = 'T';
     e1 = 'F'; =
 }


   PROCEDURE Do*;
      VAR in, out: ARRAY 256 OF CHAR; p, r, error: INTEGER;
   BEGIN
      in:='AbbAw';
      p := 0; r := 0; error := 0;
      Palindrom(in, p, LEN(in$), out, r, error);
      out[r] := 0X;
      Log.String(out$);
   END Do;
   
END PrivRefal0.

PrivRefal0.Do

Взял тестовый код из википедии.
для строки AbbA все работает, для строки 'AwbbA' все работает, а вот для строки 'AbbAw' или 'wAbbA' получаю trap в сгенерированном коде.
Код:
index out of range

 PrivRefal0.Palindrom   [000001E0H]
   .d   INTEGER   5
   .error   INTEGER   0
   .in   ARRAY 256 OF CHAR   "AbbAw"   ...
   .j0   INTEGER   35332240
   .j1   INTEGER   333824
   .match   BOOLEAN   TRUE
   .out   ARRAY 256 OF CHAR   "(䬤O", 1X   ...
   .p   INTEGER   -1
   .q   INTEGER   0
   .r   INTEGER   0
 PrivRefal0.Do   [000002B5H]


Вложения:
Refal0.odc [3.03 КБ]
Скачиваний: 339
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 21 Апрель, 2014 11:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Пётр, постараюсь посмотреть сегодня-завтра, отпишусь здесь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 10 Май, 2014 19:44 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Пётр, Вы неправильно готовите :)

Вот пример рабочей главной процедуры - взято из RocotObxSolvePath.

Код:

   PROCEDURE Do*;
      VAR t: Text.Model;
            beg, end: INTEGER;
            in, out: POINTER TO ARRAY OF CHAR;
            len, p, q, r, error: INTEGER;
            rd: Text.Reader;
   BEGIN
      BCF.FocusAndSelection(t, beg, end);
      IF t # NIL THEN
         len := end - beg;
         p := 10; q := p + len; r := 0; error := 0;
         NEW(in, p + len + 1); NEW(out, len + 1);
         rd := t.NewReader(NIL);
         rd.SetPos(beg);
         rd.Chars(in, p, len);
         Palindrom(in, p, q, out, r, error);
         WHILE p < q DO
            out[r] := in[p]; INC(r); INC(p)
         END;
         out[r] := 0X;
         Log.Ln;
         IF error = 0 THEN
            Log.String(out)
         ELSE
            Log.Int(error)
         END
      END
   END Do;
   
END PrivRefal0.

PrivRefal0.Do AbbAw

Только AbbAw надо выделять - там чтение выделения.

В чём фишка? в том, что in и out - это - не строки!! А рабочие стеки! Refal-0 не использует никакой памяти в процессе работы, кроме этих стеков.

С out-том идёт работа слева направо (вершина стека - в конце out), с in-ом - справа налево (вершина стека - с начала массива).
Это значит, что в процессе работы вершина может идти в меньшую сторону от p. На некоторых алгоритмах - нет. Но на Вашем - получается, что сгененированный код пытается использовать -1-ю ячейку массива in.

Поэтому:
1) Брать in и out с запасом под работу алгоритма. В in класть данные к концу массива, оставляя место в начале.
2) После окончания работы алгоритма левая часть результата лежит в out[0..r-1], правая - в in[p, q-1]. Их нужно конкатенировать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 10 Май, 2014 23:50 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2636
Откуда: Россия, Ярославль
Да, теперь всё работает.
А размер отступа от начала in в 10 символов рассчитывается или наугад взят?


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

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


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

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


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

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