Forth http://fforum.winglion.ru/ |
|
ИС Дракон как форт IDE http://fforum.winglion.ru/viewtopic.php?f=2&t=2992 |
Страница 1 из 3 |
Автор: | Alex [ Ср апр 16, 2014 08:58 ] | ||
Заголовок сообщения: | ИС Дракон как форт IDE | ||
информацию о ИС Дракон и философию смотрим здесь 1. oberoncore.ru 2. drakon.su 3. easyelectronics.ru хочу поделиться опытом как настроить работу ИС Дракон совместно с SPF фортом. a) создаем новую папку (директорию) для опытов и экспериментов, скачиваем туда файл dragon.exe (последнюю версию ИС Дракон можно брать здесь) При первом запуске dragon.exe формируется два файла - dragon.ini здесь хранятся настройки программы и файл dragon.ust - это файл установки. Программа полнофункциональна в течении ознакомительного периода (2-3 недели), в случае принятия решения о покупке программы необходимо связаться с автором, договорится и получить настроенный под Ваш компьютер и/или флешку файл dragon.ust b) Далее копируем в рабочую директорию собственно сам форт - файл spf4.exe c) Создаем файл dragon.bat, его содержимое: spf4.exe %1 d) Создаем файл langprogr.lpr - файл настройки ИС Дракон на язык форт, содержимое: Цитата: ; Описание языка программирования Forth [Operator] ; Комментарий Comment=\ <Comment/> ; Метка Label=[ <NN/> ] LABEL: ; Безусловный переход Goto=[ <NN/> ] GOTO ; Переход по условию ДА YesGoto=<Usl/> IF [ <NN/> ] GOTO THEN ; Переход по условию НЕТ NotGoto=<Usl/> 0= IF [ <NN/> ] GOTO THEN e) Актуализируем этот файл настроек на форт - запускаем dragon.exe, заходим в подменю Вид, ставим птичку на пункте Программирование. Справа в строке меню появляется пункт Программирование, входим в него, кликаем на пункт открыть описание языка, указываем и открываем наш файл langprogr.lpr Еще разок заходим в пукт меню Программирование и ставим птичку на пункте - и выполнить Dragon.bat, это даст нам возможность по нажатию на клавишу F9 собрать форт файл и запустить на исполнение spf4.exe Ну вот и все, теперь можно сконструировать "Hello, world!" Запускаем dragon.exe, меню: Файл->Новый или Ctrl+N - создали новый лист, позиционируем указатель мыши на белом листе, клик правой кнопкой и в контекстном меню вибираем Гном. На листе отображается пунктиром схема-гном, а внутри икона комментарий. Двойной клик на тексте ?Комментарий и в появившейся внизу зеленой области набираем слово тест или любое другое, кликаем в любом месте листа и этот текст появляется на иконе. Подобным образом вводится и другая текстовая информация в иконах ИС Дракон. Давайте сохраним нашу работу - меню: Файл->Сохранить лист как ... дадим имя hello. Видим что заголовок листа имеет теперь имя hello.drt Кликаем левой кнопкой внутри схемы гном и видим что выше и ниже иконы комментарий есть маленькие белые квадратики. Позиционируем на нижнем и клик правой кнопкой, выбирам Модуль. Кликаем на слове ?Модуль и внизу набираем две строчки. На первой hello.f на второй hello.drt, таким образом в иконе модуль мы указали ИС Дракон, что программный код из схем и икон листа hello.drt надо скомпоновать в файл hello.f Есть два носителя алгоритмов схема-примитив и схема-силуэт, для нашей задачи достаточна схема-примитив. Кликаем правой кнопкой на листе вне схемы гном,выбираем из контектного меню Примитив, на листе отображается заготовка схемы-примитива, вместо слова ?Заголовок набираем например текст привет. между иконами с текстами привет и Конец есть линия и на ней маленький квадратик с символом ? справа, позиционируем на него указатель и клик правойкнопкой, выбираем из контекстного меню Вывод. Вместо слов ?Вывод куда набираем например на экран, вместо ?Вывод что слово HELLO! Мы с помощью схемы-примитива отобразили алгоритм с именем привет,который выводит на экран слово HELLO!, а где-же форт код писать? Код записывается в так называемых Р-точках икон и схем. У нас они есть у иконы Вывод - третий маленький квадратик в правом нижнем углу и у схемы-примитива в в заголовке в левой стороне, тоже третий по порядку. Если кликнуть по нему то в зеленом поле увидим текст //Shema это слово-метка которое будет заменено при сборке текстом из P-точек икон схемы-примитива.Будем полагать что схема-примитив должна соответствовать форт-слову, Перед словом-меткой //Shema поставим начало форт слова например : hello а после слова-метки строку завершение - ; таким образом текст P-точки примитива привет должен состоять из трех строк : hello //Shema ; носителем требуемого действия у нас в примитиве является икона Вывод, в P-точке ее запишем форт код ." HELLO!" CR Вернемся теперь к схеме гном и иконе Модуль, кликнем на P-точку иконы Модуль и увидим внизу в зеленом поле уже знакомое слово-метку //Shema. Здесь будет собран код со всех схем-примитивов и схем-силуэтов нащего листа. перед этим словом-меткой надо поставить либо коменнтарий либо вызов необходимых библиотек для нашего листа, либо код а после слова-метки аналогично либо коментарий либо слова запуска нашего проекта. Пусть текст P-точки модуля у нас будет состоять из трех строк CR CR //Shema hello CR .( === test OK ===) CR Рядом с P-точкой модуля есть S-точка модуля (четвертый черный квадратик) кликнув по нему можно наблюдать весь собранный код с листа. Теперь пришло время запустить наш код - нажимаем F9 и смотрим результат. Давайте немного усложним наш пример, пусть если нажат пробел, то повторить вывод HELLO, а если нет, то завершить цикл. Открываем наш проект hello.drt, меняем в модуле имена файлов на hello1.f и hello1.drt, сохраняем наш новый проект как hello1.drt; левой кнопкой кликаем в схеме привет на линии между Выводом и Конец, далее на квадратике правой кнопкой и в контекстном меню выбираем Обычный цикл, вместо ?Вопрос вписываем нажат пробел?, в Р-точке пишем форт-код KEY BL = и далее кликаем на иконе Вывод, правой кнопкой и в контекстнов меню выбираем Вырезать, позиционируем на квадратике между иконой Вопрос и большой стрелкой, кликаем правой кнопкой и из контекстного меню выбираем вставить из буфера. Возврат в начало у нас должен идти по ветке Да иконы вопрос, чтобы установить так кликаем левой копкой по иконе Вопрос, затем правой и в контекстном меню выбираем пункт Да/Нет. После вырезки/вставки икон желательно кликнуть правой кнопкой на листе вне гнома и схем и в контекстном меню выбрать пункт обновить номера. Теперь мы подошли к важному моменту. В ИС Дракон существует два способа сборки кода из Р-точек икон - с использованием Маршрутного транслятора или без. По умолчанию стоит настройка собирать с использованием Маршрутного транслятора, чтобы отказаться от этого в строке меню выбираем Программирование, и ставим птичку на -Сборка без Маршрутного транслятора. Когда мы используем Маршрутный транслятор, то ИС Дракон по составленному нами алгоритму из развилок, циклов и переключателей автоматически строит систему переходов, раставляя метки (LABEL) и передачи управления (GOTO). Поскольку подходящей бибилиотеки реализации GOTO в SPF4 не нашлось, то на основе некоторых вариантов предложенных ранее здесь на форуме Михаилом Максимовым и ~chess разработал вариант с большим количеством меток (до 1000) в форт слове: Код: CREATE XSOURCE 0x10000 ALLOT CREATE XLABEL 1000 CELLS ALLOT 0 VALUE X>IN 0 VALUE XDP 0 VALUE XN VARIABLE XFP 0 , VARIABLE XCURSTR : PLACE ( addr len dest -- ) SWAP 0 MAX 0xFF AND SWAP 2DUP 2>R CHAR+ SWAP MOVE 2R> C! ; : [BEGIN] >IN @ TO X>IN DP @ TO XDP SOURCE XSOURCE PLACE SOURCE-ID FILE-POSITION DROP XFP 2! CURSTR @ XCURSTR ! ; IMMEDIATE : [AGAIN] XSOURCE COUNT DUP #TIB ! TIB SWAP MOVE XCURSTR @ CURSTR ! X>IN 1+ >IN ! XDP DP ! XFP 2@ SOURCE-ID REPOSITION-FILE DROP ; IMMEDIATE : L: DIS-OPT 1 TO XN XLABEL 1000 CELLS ERASE : POSTPONE [BEGIN] ; : L; XN IF XN 1- TO XN POSTPONE [AGAIN] EXIT THEN HERE XLABEL ! POSTPONE ; SET-OPT ; IMMEDIATE : LABEL: XN 0 > IF HERE SWAP CELLS XLABEL + ! ELSE DROP THEN ; IMMEDIATE : GOTO XN 0 > IF 0 AND THEN CELLS XLABEL + @ BRANCH, ; IMMEDIATE \ adds for ИС Дракон : NOTFOUND ( a u - ) OVER 4 S" _end" COMPARE 0= IF 4 - SWAP 4 + SWAP ?SLITERAL ELSE NOTFOUND THEN ; : //Shema 1 PARSE 2DROP ; IMMEDIATE : ...... 1 PARSE 2DROP ; IMMEDIATE Эту бибилиотечку сохраним в файле goto.f и подключим его прописав в первой строчке Р-точки в иконе Модуль. Все форт слова с использованием меток и переходов должны начинаться с L: вместо : и завершаться L; вместо ; поэтому поправим текст в Р-точке схемы-примитива с именем привет. Сохраняем наш проект и нажав F9 убеждаемся что все работает как надо. А можно ли собрать работающий код без Маршрутного транслятора? Конечно. В данном режиме ИС Дракон не формирует меток и переходов, а формирует код из Р-точек проходя проект по схемам и веткам слева на право и сверху вниз. Берем наш проект hello1.drt, сохраняем как hello2.drt, перключаем ИС Дракон на сборку без Маршрутного траслятора, модифицируем наш проект. Выкидываем строчку подключения goto.f из Р-точки модуля, в схеме привет в Р-точке меняем L: и L; на обычные. В Р-точке иконы Вывод должен быть форт-код BEGIN ." HELLO!" CR а в иконе Вопрос KEY BL = 0= UNTIL вот и все. Мы воспользовались тем фактом что ИС Дракон скомпонует первой икону номер 6 (Вывод) а затем икону номер 7 (Вопрос) и поставили в нужных местах BEGIN,UNTIL и подправили условие для соответствия алгоритму. Поработав с этими простейшими примерами, Вы наверно заметили, что принцип работы в ИС Дракон прост: левой кнопкой выбираем (активируем) обьект схемы и листа, а правой выбираем действие из контекстного меню. Я специально расказал о работе до уровня клика, чтобы первый механический этап прошел быстрее и легче и наше внимание больше было на алгоритмах и формируемом форт-коде.
|
Автор: | Alex [ Чт апр 17, 2014 13:59 ] | ||
Заголовок сообщения: | Re: ИС Дракон как форт IDE | ||
Предлагаю посмотреть на еще один пример, более крупный. Вот адаптация конвеевской игры жизнь с сайта rosettacode на SPF Код: \ Conway's Game of Life \ originally from http://rosettacode.org/wiki/Conway's_Game_of_Life#Forth \ see also http://en.wikipedia.org/wiki/Conway's_Game_of_Life \ ------------------------------------------------------------------- \ The fast wrapping requires dimensions that are powers of 2. \ (for playing just size, you may set terminal size to 64x17) WINAPI: GetTickCount KERNEL32.DLL VARIABLE RND : RANDOMIZE GetTickCount RND ! ; RANDOMIZE : RANDOM ( -- u ) RND @ 69069 * 31415 + 278720333 MOD DUP RND ! ; \ Псевдослучайная величина от 0 до u1-1 : CHOOSE ( u1 -- u2 ) 278720333 SWAP U/ RANDOM ABS SWAP U/ ; WINAPI: SetConsoleCursorPosition KERNEL32.DLL : AT-XY ( X Y -- ) 16 LSHIFT OR H-STDOUT SetConsoleCursorPosition DROP ; 64 CONSTANT _width_ 16 CONSTANT _height_ : nrows _width_ * 2* ; 1 nrows CONSTANT _row_ _height_ nrows CONSTANT _size_ CREATE world _size_ ALLOT world VALUE old old _width_ + VALUE new VARIABLE *gen* \ generation : clear-world world _size_ ERASE ; : flip-world new old TO new TO old ; : row+ _row_ + ; : row- _row_ - ; : col+ 1+ ; : col- 1- DUP _width_ AND + ; \ avoid borrow into row : wrap ( i -- i ) [ _size_ _width_ - 1- ] LITERAL AND ; : wow@ ( i -- 0/1 ) wrap old + C@ ; : wow! ( 0/1 i -- ) wrap old + C! ; : ow@ ( i -- 0/1 ) old + C@ ; : nw! ( 0/1 i -- ) new + C! ; : clear clear-world 0 *gen* ! ; : age flip-world 1 *gen* +! ; : init 500 750 CHOOSE + 0 DO 1 _size_ CHOOSE world + C! LOOP ; : foreach-row ( xt -- ) _size_ 0 DO I OVER EXECUTE _row_ +LOOP DROP ; \ the core Game of Life rules: just 3=>born, 2or3=>still alive, else=>die : gencell ( i -- ) DUP col- row- wow@ \ sum-neighbors OVER row- wow@ + OVER col+ row- wow@ + OVER col- wow@ + OVER col+ wow@ + OVER col- row+ wow@ + OVER row+ wow@ + OVER col+ row+ wow@ + \ -- i n OVER ow@ OR 3 = 1 AND SWAP nw! ; : genrow ( i -- ) _width_ OVER + SWAP DO I gencell LOOP ; : gen ( -- ) ['] genrow foreach-row age ; : emit-pos ( 0/1-- ) IF [CHAR] O ELSE BL THEN EMIT ; : showrow ( i -- ) CR old + _width_ OVER + SWAP DO I C@ emit-pos LOOP ; : show ( -- ) 0 0 AT-XY ['] showrow foreach-row CR ." Generation " *gen* @ . 20 PAUSE ; : life ( -- ) BEGIN gen show KEY? UNTIL ; clear init life ---- в прикрепленном архиве этот файл и три драконовских проекта life1.drt,life2.drt,life3.drt
|
Автор: | Alex [ Чт апр 17, 2014 14:00 ] | ||
Заголовок сообщения: | Re: ИС Дракон как форт IDE | ||
файл life1.drt все высокоуровневые слова представлены схемами-примитивами языка Дракон. недостаток - не вмещается на экран, для обзора приходится применять скроллинг
|
Автор: | Alex [ Чт апр 17, 2014 14:02 ] | ||
Заголовок сообщения: | Re: ИС Дракон как форт IDE | ||
файл life2.drt преобразование системы схем-примитивов в схему-силуэт. В нашем случае силуэт будет состоять из двух веток - генерировать поколение и отобразить. В проект life1.drt добавляем пустышку-силуэт, формируем две ветки и начинаем их наполнять путем вырезки/вставки икон из схем-примитивов.
|
Автор: | Alex [ Чт апр 17, 2014 14:03 ] | ||
Заголовок сообщения: | Re: ИС Дракон как форт IDE | ||
файл life3.drt а ветки то в силуэте life2.drt имеют один и тот-же двойной цикл, обьеденим их в одну и получим схему-примитив.
|
Автор: | gudleifr [ Чт апр 17, 2014 17:23 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
Цитата: - Специально для вас,- ответил великий комбинатор.- Вы, я замечаю, все время терзаетесь муками творчества. Писать, конечно, очень трудно. Я, как старый передовик и ваш собрат по перу, могу это засвидетельствовать. Но я изобрел такую штуку, которая избавляет от необходимости ждать, покуда вас окатит потный вал вдохновения. Вот. Извольте посмотреть.
И Остап протянул Ухудшанскому лист, на котором было написано: ТОРЖЕСТВЕННЫЙ КОМПЛЕКТ Незаменимое пособие для сочинения юбилейных статей, табельных фельетонов, а также парадных стихотворений, од и тропарей ... Когда Ухудшанский ознакомился с содержанием документа, глаза его, доселе мутные, оживились. Ему, пробавлявшемуся до сих пор отчетами о заседаниях, внезапно открылись сверкающие стилистические высоты. - И за все - двадцать пять тугриков, двадцать пять монгольских рублей,- нетерпеливо сказал великий комбинатор, томимый голодом. - У меня нет монгольских,- молвил сотрудник профоргана, не выпуская из рук "Торжественного комплекта". Остап согласился взять обыкновенными рублями... |
Автор: | mgw [ Чт апр 17, 2014 22:52 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
Очень интересный подход и применение Дракон для генерации алгоритмов. Я неоднократно применял Дракон для описания бизнес-процессов при обследовании предприятий, перед постановкой задачи. Хотя читал, что Дракон может генерировать программы, сам ни разу не пробовал. Сейчас вернусь к этой теме, тем более, что сделана привязка к Форту. Спасибо за работу |
Автор: | Hishnik [ Пт апр 18, 2014 01:25 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
Средств для рисования диаграмм довольно много. Дракон на моей памяти обсуждался уже довольно давно (не здесь), и со стороны его апологетов - довольно агрессивно. Блок-схемы - они и есть блок-схемы, не надо от них ждать волшебных результатов, "чтобы программы сами собой писались". А когда к блок-схемам приплетаются какие-то "дружелюбные интерфейсы" и "улучшение ума", хочется посоветовать авторам таких вещей побольше внимания уделять основной работе и поменьше вываливать на окружающих собственные восторги от внезапного понимания чего-то в смежной области. Там, в смежной области, может быть давно все это известно. |
Автор: | idem [ Сб апр 19, 2014 07:30 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
Ага. бум-с |
Автор: | KPG [ Вс апр 20, 2014 07:25 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
Alex писал(а): Предлагаю посмотреть на еще один пример, более крупный. Вот адаптация конвеевской игры жизнь с сайта rosettacode на SPF Кстати на rosettacode нет упоминания решений на SPF4 и сама SPF4 не упоминается Forth implentations on Rosettacode |
Автор: | KPG [ Вс апр 20, 2014 11:09 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
idem писал(а): Ага. бум-с Одно из местных небольших обсуждений Применимость блок схем при создании програм |
Автор: | idem [ Пт июн 13, 2014 16:58 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
gudleifr писал(а): Цитата: Писать, конечно, очень трудно. Я, как старый передовик и ваш собрат по перу, могу это засвидетельствовать. Но я изобрел такую штуку, которая избавляет от необходимости ждать, покуда вас окатит потный вал вдохновения. Вот. Извольте посмотреть Ещё дети лейтенанта Шмидта. Цитата: …введение нового термина «окрестность» нормативно-правового документа, подразумевающий наглядную графическую интерпретацию и автоматический анализ «окрестности» с целью выявления потенциально-опасных с точки зрения несоблюдения норм законотворчества ситуаций…
<…> Научная новизна работы. 1) Впервые предложена модель нормативно-правовых документов и их взаимосвязей, позволившая ввести новые понятия «окрестность»… <…> Научная новизна предлагаемого автором подхода подтверждается выданным Федеральной службой по интеллектуальной собственности, патентам и товарным знакам РФ патентом на изобретение «Способ визуализации взаимосвязей нормативно-правовых документов в виде графа»… |
Автор: | Hishnik [ Сб июн 14, 2014 15:54 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
idem писал(а): введение нового термина «окрестность» нормативно-правового документа, Я вот не специалист в области права, поэтому не могу сказать, насколько актуально и значимо то, что автор сделал в этой работе с точки зрения права. Возможно, что именно графической интерпретации там и не хватало, поэтому делать выводы можно только после консультации с соответствующими специалистами. idem писал(а): Научная новизна предлагаемого автором подхода подтверждается выданным Федеральной службой по интеллектуальной собственности, патентам и товарным знакам РФ патентом на изобретение «Способ визуализации взаимосвязей нормативно-правовых документов в виде графа»… А вот это да, промах. Наличие патента не подтверждает научный характер изобретения. Патент подтверждает только то, что данный способ для указанной автором цели ранее не использовался, а вот научен ли он, или это просто техническое решение без новой научной составляющей - предмет отдельного рассмотрения. Обычно научную новизну указывают и выносят на защиту отдельно, а список патентов идет сам по себе. |
Автор: | idem [ Сб июн 14, 2014 19:16 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
Хищник писал(а): Я вот не специалист в области права, поэтому не могу сказать, насколько актуально и значимо то, что автор сделал в этой работе с точки зрения права. Возможно, что именно графической интерпретации там и не хватало, поэтому делать выводы можно только после консультации с соответствующими специалистами. Думаете, юристы не участвуют в холиварах? |
Автор: | Hishnik [ Сб июн 14, 2014 19:47 ] |
Заголовок сообщения: | Re: ИС Дракон как форт IDE |
idem писал(а): Думаете, юристы не участвуют в холиварах? Да все, наверное, участвуют Я просто отметил, что поскольку большинство собравшихся не юристы, рубить сплеча в чужой области вряд ли стоит. Я нередко отмечал, что какие-то технологии или методологические подходы, хорошо знакомые программистам или электронщикам, оказываются прорывными в смежных областях. Юрист же не программист - максимум "программирующий профессионал", отсюда и требования к софту для него. Легко можно представить ситуацию, когда программист, пишущий с наскока, к примеру, софт для медицины, оказывается окружен медиками, которые катаются по полу от смеха и показывают на него пальцами с комментариями вроде "ты глянь, глянь, у него амнезия и аппендицит в одном разделе БД " Я вот честно-пречестно даже не представляю, смешно это или нет, и что сейчас думают медики о программном обеспечении, которое должно помогать им в работе. И с юристами та же история. Я не хочу утверждать, что диссертация идеальна - я как раз отмечаю, что судить об уровне работы может только команда из программистов и юристов, которые предварительно проконсультируются друг с другом. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |