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. |
Появилась одна идея использования "Рокот". На мой взгляд, была бы интересна трансляция программ, написанных на языке 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]
|
Автор: | Илья Ермаков [ Понедельник, 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/ |