Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 20:46

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 19:21 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Влияет. Не понимая, свойств инструмента, Вы не сможете нормально его использовать.
Не влияет. Я понимаю что представляют из себя Lex и Yacc. Лекс строит код, который по определенным, заданным заранее правилам разбивает входной текст на морфемы, токены, слова. Назовите как хотите.

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

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

Что бы получить "плавающие" синтаксис и граматику, например можно внести в тракт [SRC] --> LEX_FN -- > YACC_FN --> INTERP три вектора на сам интерпретатор, на заранее подготовленные "затычки"

[SRC] --> @PREPROCESSOR --> LEX_FN --> @TOKEN_PROCESSOR --> YACC_FN --> @GRAMMAR_BYPASS --> INTERP.

И в таком режиме, вешая на эти вектора свои функции можно динамически расширять синтаксис и граматику полученного языка. вклиниваясь в поток обработки исходников.

Цитата:
Но еще менее следует "отсутствие стека". Тем более, что Вы опять малость передернули.
Нисколько. В большинстве СИ компиляторов под большинство платформ действительно используется стек, я это не отрицаю. Но писать программы принципиально без стека на си возможно. Даже на стандартных реализациях, хотя это и будет выглядеть страшно. Ведь никто не запрещает пользоваться только if-else, GOTO-метка, и глобальными переменными в стиле Алгол. Си - это не только функции. Это еще и удобный способ записи алгоритмов.

Цитата:
Пытаясь понять FORTH?
Пытаясь понять ФОРТ я читал Броуди и Баранова. Пытался почитать Декстеру, но у него язык плохо подходит для легкого чтения. Сейчас же я осознал, что форт для большинства моих применений слишком низкоуровневый, и продумываю свой собственный, ни с чем не совместимый диалект лиспа. Ибо большенство существующих стандартов обладают избыточной для меня математической моделью например. За одно и освежаю в памяти Лисп вообще, как таковой - давненько не писал на нём ничего. К форту же вернусь скорее всего, когда таки начну ковыряние кортексовских процессоров. Там для форта как раз удобная ниша.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 19:56 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Desutorakuta писал(а):
Сейчас же я осознал, что форт для большинства моих применений слишком низкоуровневый, и продумываю свой собственный, ни с чем не совместимый диалект лиспа. Ибо большенство существующих стандартов обладают избыточной для меня математической моделью например.

В списке связок Forth&Lisp есть, например, ещё Factor язык из списка конкатенативных языков.

P.S. Аналоги Lexx Yacc есть и в Форте (один из них Gray4 в GForth), что то можно найти в FFL и SFL :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 20:04 
Desutorakuta писал(а):
Я понимаю что представляют из себя Lex и Yacc.
Я понимаю, тут тоже проще согласиться. Все равно, опять не поймете.

Desutorakuta писал(а):
Нисколько...
Т.е. опять передернули... Уже и К&П неправы...

Desutorakuta писал(а):
Ибо большенство существующих стандартов [LISP] обладают избыточной для меня математической моделью например.
А это новость. Т.к. кроме математической модели в LISP отродясь ничего ве водилось.

Впрочем, зная Вас, заранее соглашаюсь с чем угодно.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 23:24 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
:twisted: Да, я просто само зло, судя по вашим выводам. Нужно в душ сходить, что бы быть еще и чистым =)

Я прекрасно понимаю ваши доводы, но, боюсь, непонимание присутствует с вашей стороны.

Цитата:
Т.е. опять передернули... Уже и К&П неправы...
Из каких моих слов вы сделали такой вывод? Кериган и Ричи, безусловно, крайне авторитетный источник.

Цитата:
А это новость. Т.к. кроме математической модели в LISP отродясь ничего ве водилось.
Ну, кроме математической модели самого лиспа, в стандарты из математики просачиваются такие избыточные в среднем случае вещи как обработка рациональных дробей или комплексных чисел.


KPG писал(а):
В списке связок Forth&Lisp есть, например, ещё Factor язык из списка конкатенативных языков.
Кстати да, спасибо что напомнили. Я хотел почитать о факторе, но как то вылетело из головы...

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 23:45 
Desutorakuta писал(а):
Я прекрасно понимаю ваши доводы
Судя, по полному отсутствию контраргументов, нет. Но Вы не расстраивайтесь, это надо читать, разбирать, пробовать... А Вам еще пока по молодости кажется, что достаточно взять лучшее у всех этих старых педерастов и чуть-чуть добавить своей гениальности...

Desutorakuta писал(а):
боюсь, непонимание присутствует с вашей стороны.
Еще бы! Ведь я не ограничиваюсь в своих ответах привычными Вам штампами.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Вс июл 03, 2016 00:19 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цель провела успешный спас-бросок стойкости.
Ваша попытка применить умение "оскорбление" провалена.
Desutorakuta смотрит на вас со снисхождением.

Цитата:
А Вам еще пока по молодости кажется, что достаточно взять лучшее у всех этих старых педерастов и чуть-чуть добавить своей гениальности...
Моей гениальности хватает лишь на то, что бы ставить себе практические задачи, читать умные книжки и критически относиться к любому суждению.

Цитата:
я не ограничиваюсь в своих ответах привычными Вам штампами.
Естественно. Вы ограничиваетесь привычными вам =).

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Вс июл 03, 2016 00:25 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Цитата:
Цитата:
я не ограничиваюсь в своих ответах привычными Вам штампами.
Естественно. Вы ограничиваетесь привычными вам =).

Придёт mOleg и gudleifr потерёт спокойно свои посты :)

P.S. Но небольшой пик "популярности" этот тред получил


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Вс июл 03, 2016 00:58 
KPG писал(а):
и gudleifr потерёт спокойно свои посты
Можно и сейчас потереть. Все, что было интересного, я давно перенес у себе. Новых вопросов наш уважаемый коллега не поднял. Ответам на давно решенные - не внял. А для того, чтобы мы восхитились свежестью его мышления, слишком быстро скатился в банальности... Пусть корчит из себя Бэкуса на Тьюринговской лекции без меня...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Вс июл 03, 2016 13:36 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
P.S. Но небольшой пик "популярности" этот тред получил
И то пища =)

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пн июл 04, 2016 18:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Главное, что gudleifr "подкормился" :) К классикам и за матчастью послал, на собственное интеллектуальное и моральное превосходство намекнул. "Чего ж вам больше? Свет решил, что он умен и очень мил". При необходимости видеть его сообщения можно их цитировать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пн июл 04, 2016 19:19 
Hishnik писал(а):
Главное, что gudleifr "подкормился"
Судя, по данным коллеги KPG, подкормил форум. Хоть какая-то видимость жизни на этой планете. Просить писать по означенной теме, думаю, бесполезно... Обсудили кодирование, хеширование, проблемы универсальности С и LISP... Теперь, будем опять мою нелюбовь к местному бомонду обсуждать?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт июл 08, 2016 15:29 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Шибанула меня намедни мысль одна
И начал я её думать
Поскольку слова немедленного исполнения в конечной программе не нужны, как и всякие слова, которые легче вставить на месте типа dup, swap и т.д
Неплохо было бы написать либу по написанию immediate-либ 8)
Т.е. фортер создаёт либу, а потом её "загружает"
Делал ли кто-нибудь подобное?

Примерная идея реализации:
Создаём файл.
Пишем слово для разбора
Предполагаемый синтаксис to-lib( s{ start-code [char] } parse s, end; Constanta 10 ) commentary( пример, блин! )
Где start-code означает начало строки, которая при будущем обращении выполнится по evaluate ,а end; ,соответственно, завершает строку
Если после определения "start-code" отсутствует, то считаем что псевдослово является константой
Как это будет выглядеть внутри?
Само определение, после него ячейка, где записан размер строки, и так далее. В конце всего этого записан 0 и начинаются комментарии.

Как этим пользоваться после сотворения?
Получаем начало файла, запускаем обработчик.
Для удобства суём куда-нибудь этот обработчик, в notfound, как вариант
Зачем это надо?
Банально съэекономить на определениях.
Потенциально уменьшить конечную программу на килобайт, а то и два.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт июл 08, 2016 16:01 
Victor__v писал(а):
слова немедленного исполнения в конечной программе не нужны

Есть такая штука, как целевая компиляция

Victor__v писал(а):
Т.е. фортер создаёт либу, а потом её "загружает"

Блин, сразу и не узнал. Это же Вы про оверлеи.

***

Вообще, мысль интересная. Допустим, результатом действия машины Mi является код Si, готовый к исполнению.
Задача: к S1 добавить S2. Понятно, это интересно в условиях зависимости поведения M2 от S1 (иначе S2 можно получить заранее и тупо соверлеить). Значит, к S1 нужно добавить M2, подождать, пока она получит S2, а затем M2 удалить. Тут вопрос, скорее, не в изобретении слов, а в управлении памятью.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пн июл 11, 2016 11:59 
Это, скорее, надо в "рефакторинг"...

Если помните, кораблики в моей игре описывались в списковой базе данных:
Код:
BAKU
  CVHG
  USSR
  КРУПНЫЙ
  АВИАНОСЕЦ
  3"
  "A"
  "C"
  ЖИВУЧЕСТЬ 9
  ЦЕНА 15
  AIR 1
  AIR-DEF 2

А рисуются пока примерно так:
Код:
USSR CVHG BAKU

    3"AC + \\
\++++++000000000/

Как из первого получить второе, сохранив, прозрачность кода?
(Размышляя над этой темой, я понял, что опять вернулся к вопросу рисования экранных интерфейсов. Ведь, если "оконный" ввод на FORTH осуществляется элементарно - переназначением входного потока - жмешь кнопку, получаешь слово для исполнения, то с "оконным" выводом все гораздо страшнее - формы, вложенные объекты, куча эвентов-пропертей... А, ведь, возвращаясь к корабликам - это просто перенос управляющей информации из внутренних структур в процедуру рисования, из произвольной формы в строго упорядоченный шаблон. Этакий "FORTRAN-формат наоборот").
Итак, на входе ПЕРЕНОСЧИК пары "символ-значение" (Здесь и далее "символом" обозначаю описанное ранее слово, выдающее адрес своего имени), а на выходе рисование соответствующей фигульки в соответствующем месте.
Не будем поминать всуе функциональное программирование - сделаем проще. Прошьем в код пустой шаблон процедуры рисования. Например, рисование пушек будет выглядеть (в прошивке) так:
Код:
...
LIT 3" LIT 5" LIТ 16" РИСОВАТЬ-ПУШКИ
...

где символы служат якорями/сигнатурами, куда ПЕРЕНОСЧИК будет втюхивать значения (понятно, ПЕРЕНОСЧИК уродует не сам шаблон, а его дубликат, нам же не один кораблик рисовать).
После обработки символа 3" имеем:
Код:
...
LIT 1 LIT 5" LIТ 16" РИСОВАТЬ-ПУШКИ
...

Что и должно символизировать что, будучи запущенной, РИСОВАТЬ-ПУШКИ напечатает 3".

Для удобства поиска/обработки сигнатур имеет смысл применять в шаблоне вместо LIT специальное слово LIT0 (как LIT, но на стек всегда кладется ноль), которое будет заменяться на LIT при подстановке значения.

Конечно, возможны коллизии значение/символ и ноль/отсутствие, но в каждом частном случае они вполне победимы. Более того, способ представления символов делает возможным упрощенную прошивку:
Код:
...
РИСОВАТЬ-ПУШКИ 3" 5" 16"
...

где умный "шитый оборот" РИСОВАТЬ-ПУШКИ сам выберет из кода нужные ему значения и проигнорирует символы.

Заполненную процедуру можно не только пустить на рисование, но и сохранить в новом слове - рисования отдельного кораблика.

Конечно, можно не трогать процедуру рисования, а применить специальную таблицу (даже, таблицу структур), откуда она будет черпать значения, но при этом пропадет прозрачность кода. В БД все ясно, т.к. там тупо символы-значения, в процедуре рисования - тоже (что, где и когда рисуем). А таблица - это новый уровень косвенности, который программисту нужно рассчитывать особо.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пн июл 11, 2016 20:23 
Пример к предыдущему посту (без копирования шаблона):

: СИМВОЛ HERE CREATE >NAME , DOES> @ ;

СИМВОЛ КОРАБЛЬ СИМВОЛ КЛАСС
СИМВОЛ BAKU СИМВОЛ CVHG
СИМВОЛ USSR СИМВОЛ US СИМВОЛ UK СИМВОЛ FRANCE СИМВОЛ JAPAN
СИМВОЛ КРУПНЫЙ СИМВОЛ ЛИНКОР СИМВОЛ АВИАНОСЕЦ СИМВОЛ ПОДЛОДКА
СИМВОЛ 3" СИМВОЛ 5" СИМВОЛ 16"
СИМВОЛ "A" СИМВОЛ "B" СИМВОЛ "C"
СИМВОЛ AIR СИМВОЛ AIR-DEF СИМВОЛ AIR-ASW
СИМВОЛ ЦЕНА СИМВОЛ ЖИВУЧЕСТЬ

: LIT0 R> CELL+ >R 0 ;

: НАЦИЯ. 5 0 DO DUP IF COUNT TYPE SPACE ELSE DROP THEN LOOP ;
: ИМЯ. DUP IF COUNT TYPE SPACE ELSE DROP THEN ;
: ПУШКИ. IF ." 3#" THEN IF ." 5#" THEN IF ." 16#" THEN ;
: РАКЕТЫ. IF ." A" THEN IF ." B" THEN IF ." C" THEN ;
: САМОЛЕТЫ. DUP IF 0 DO ." +" LOOP SPACE ELSE DROP THEN ;
: ПВО. DUP IF 0 DO ." \" LOOP SPACE ELSE DROP THEN ;
: ПЛО. DUP IF 0 DO ." /" LOOP SPACE ELSE DROP THEN ;
: КОРПУС. OVER - 0 DO ." +" LOOP 0 DO ." 0" LOOP ;

CREATE РИСОВАЛКА 0 , ]
LIT0 US LIT0 USSR LIT0 UK LIT0 FRANCE LIT0 JAPAN НАЦИЯ.
LIT0 КЛАСС ИМЯ. LIT0 КОРАБЛЬ ИМЯ. CR CR
3 SPACES
LIT0 16" LIT0 5" LIT0 3" ПУШКИ.
LIT0 "C" LIT0 "B" LIT0 "A" РАКЕТЫ.
SPACE LIT0 AIR САМОЛЕТЫ. LIT0 AIR-DEF ПВО. LIT0 AIR-ASW ПЛО.
CR ." \"
LIT0 ЖИВУЧЕСТЬ LIT0 ЦЕНА КОРПУС.
." /" CR ;
HERE РИСОВАЛКА !

: ПЕРЕНОСЧИК ( СИМВОЛ, ЗНАЧЕНИЕ --)
РИСОВАЛКА DUP @ SWAP CELL+ DO
I @ ['] LIT0 = IF
OVER I CELL+ @ EXECUTE = IF
['] LIT I ! DUP I CELL+ ! THEN
2 CELLS ELSE CELL THEN +LOOP 2DROP ;

\ В БОЕВЫХ УСЛОВИЯХ ПЕРЕНОСЧИК БУДЕТ ВЫЗЫВАТЬСЯ В ЦИКЛЕ ПЕРЕБОРА СПИСКА
КЛАСС CVHG ПЕРЕНОСЧИК
USSR USSR ПЕРЕНОСЧИК
КОРАБЛЬ BAKU ПЕРЕНОСЧИК
3" 1 ПЕРЕНОСЧИК
"A" 1 ПЕРЕНОСЧИК
"C" 1 ПЕРЕНОСЧИК
AIR 1 ПЕРЕНОСЧИК
AIR-DEF 2 ПЕРЕНОСЧИК
ЖИВУЧЕСТЬ 9 ПЕРЕНОСЧИК
ЦЕНА 15 ПЕРЕНОСЧИК

: EX1 РИСОВАЛКА CELL+ >R ;
CR CR EX1 CR


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB