OberonCore
https://forum.oberoncore.ru/

Rocot - язык обработки текстов Рефал-0
https://forum.oberoncore.ru/viewtopic.php?f=90&t=1201
Страница 2 из 3

Автор:  Роман М. [ Четверг, 22 Апрель, 2010 16:14 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

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

Автор:  Илья Ермаков [ Четверг, 22 Апрель, 2010 18:30 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Тут Рокот сам по себе неважен.

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

Автор:  igor [ Пятница, 23 Апрель, 2010 04:54 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Идея меня не вдохновляет. Нужно думать на Обероне, а не просто переписывать на него программы с других языков. MATLAB уже не исправить, разве что переписать заново.

Автор:  Илья Ермаков [ Пятница, 23 Апрель, 2010 08:27 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Не могу судить.

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

Автор:  igor [ Пятница, 23 Апрель, 2010 09:00 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Кстати, в матлабовском симулинке функции можно писать на разных языках, в том числе на Аде. Но там всё строго по шаблону. Фактически нужно написать заранее придуманные разработчиками MATLAB "заклинания", кое-где подставив свои параметры. Шаг вправо, шаг влево - растрел!

Автор:  igor [ Пятница, 23 Апрель, 2010 09:12 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

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

Автор:  id_ler [ Пятница, 10 Сентябрь, 2010 13:57 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Извиняюсь, если не в тему или давно известно…

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

Автор:  Alexey Veselovsky [ Среда, 15 Декабрь, 2010 07:38 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Можно кратко, чем отличается Рефал-0 от Базисного Рефала и от Полного Рефала (Рефал-5)?

Автор:  Илья Ермаков [ Среда, 15 Декабрь, 2010 10:36 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Я не помню точно, чем именно шире те Рефалы, чем мой.
У меня самый минимум для работы на двух стеках символов без динамической памяти и рантайма.
Поэтому отсутствуют древовидные списки - "изюминка" Рефала.
Ну и всё прочее...

Автор:  Alexey Veselovsky [ Среда, 15 Декабрь, 2010 11:16 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Илья Ермаков писал(а):
Я не помню точно, чем именно шире те Рефалы, чем мой.
У меня самый минимум для работы на двух стеках символов без динамической памяти и рантайма.
Поэтому отсутствуют древовидные списки - "изюминка" Рефала.
Ну и всё прочее...

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

Автор:  Илья Ермаков [ Среда, 15 Декабрь, 2010 16:09 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

А что Вы имеете в виду под синт. сахаром?

Автор:  Alexey Veselovsky [ Среда, 15 Декабрь, 2010 16:17 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Илья Ермаков писал(а):
А что Вы имеете в виду под синт. сахаром?

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

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

Автор:  Илья Ермаков [ Среда, 15 Декабрь, 2010 17:25 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Ещё одно ограничение - только одна e-переменная в образце. Для того, чтобы сделать возможным безоткатное сопоставление (тупой линейный поиск).

Автор:  Alexey Veselovsky [ Среда, 15 Декабрь, 2010 17:36 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Илья Ермаков писал(а):
Ещё одно ограничение - только одна e-переменная в образце. Для того, чтобы сделать возможным безоткатное сопоставление (тупой линейный поиск).

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

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

Автор:  Илья Ермаков [ Среда, 15 Декабрь, 2010 18:13 ]
Заголовок сообщения:  Re: Язык обработки текстов Рефал-0. Подсистема ROCOT.

Пардон. До двух e-переменных, конечно.

Автор:  Евгений Темиргалеев [ Четверг, 07 Июль, 2011 12:33 ]
Заголовок сообщения:  Re: Rocot - язык обработки текстов Рефал-0

http://oberoncore.ru/bbcc/subs/rocot/

Автор:  Пётр Кушнир [ Суббота, 19 Апрель, 2014 23:34 ]
Заголовок сообщения:  Re: Rocot - язык обработки текстов Рефал-0

Пробую тут компонент генерации кода из рефала.
Код:
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 КБ]
Скачиваний: 284

Автор:  Илья Ермаков [ Понедельник, 21 Апрель, 2014 11:25 ]
Заголовок сообщения:  Re: Rocot - язык обработки текстов Рефал-0

Пётр, постараюсь посмотреть сегодня-завтра, отпишусь здесь.

Автор:  Илья Ермаков [ Суббота, 10 Май, 2014 19:44 ]
Заголовок сообщения:  Re: Rocot - язык обработки текстов Рефал-0

Пётр, Вы неправильно готовите :)

Вот пример рабочей главной процедуры - взято из 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 ]
Заголовок сообщения:  Re: Rocot - язык обработки текстов Рефал-0

Да, теперь всё работает.
А размер отступа от начала in в 10 символов рассчитывается или наугад взят?

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