Forth
http://fforum.winglion.ru/

Генератор на Форте кода для C
http://fforum.winglion.ru/viewtopic.php?f=2&t=3119
Страница 3 из 6

Автор:  loztcatz [ Ср апр 05, 2017 23:31 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

KPG писал(а):
Может даже имеет смысл создать Лисп подраздел т.к. какие то обсуждения уже есть в рамках данного форума.
Так лиспа как такового здесь еще не было) Как потребуется создадим)
KPG писал(а):
Мало людей на данном форуме явно отделяют Форт язык от Форт парадигмы.
Самое забавное, что она существовала еще до появления форта)
KPG писал(а):
Также это соотносится и с "манипуляциями" на стеке. :)
Вот и я о том же.
KPG писал(а):
Думаю он про Лисп намного больше присутствующих здесь форумчан может расказать.
Не известно же кто и в какой степени владеет аппаратом ФП на местном форуме. а он отметился некоторым числом статей в этом направлении.
Видите ли с современной точки зрения лисп не является языком ФП, но он позволяет писать в функциональном стиле. Вот только код выдержанный в данном стиле нигде кроме как в академической среде не практикуется, ибо вызывает баттхерт у бывалых лисперов.

Автор:  dmitry-st [ Чт апр 06, 2017 08:44 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

Странно видеть сравнение Lisp и Forth :roll:
Для меня они как две основы на которых строятся все остальные языки.
Наш разговорный язык тоже состоит из смеси префиксной и постфиксной нотации.

Программа написанная на инфиксном языке, например, на C:
1) Переводится компилятором в abstract syntax tree (AST).
2) Потом начинается рекурсивный обход (разворачивание) этого дерева для генерации машинного кода. При этом сначала вычисляются аргументы функций в некотором порядке (порядок вычисления аргументов и функций зачастую не закреплён - в С он на усмотрение компилятора и это иногда приводит к неприятным эффектам).

Так почему я не противопоставляю Lisp и Forth?
Синтаксис Лиспа это вариант текстового представления AST получаемого компилятором (clang например выдаёт его в XML).
Синтаксис Форта это следующая стадия, когда дерево уже развёрнуто и определена строгая последовательность вычисления всех вспомогательных аргументов.

Оба языка отражают внутреннюю кухню, показывают подводную часть айсберга, и соответственно дают глубокое осознание процесса программирования.
Эта внутренняя кухня красива своей простотой и логичностью. Настолько, что оба языка имели своё выражение в виде процессоров.
Идеи положенные в основу обоих языков хороши, но их реализации имеет недостатки. Думаю нет смысла здесь их перечислять.

Реализация моей задачи на C/C++ или Лиспе мне понятна и конечно я эти варианты не забываю, а реализовать на Форте это в первую очередь интересный новый опыт и первый вопрос:
Как мог бы выглядеть файл описывающий структуры С с дополнительными критериями?
Пока себе выписал как примеры: SQL, конфигурация Nagios, JSON, тип record в Модула-2 и он же в Ада, в виде таблиц (предложение от Victor__v).

p.s. Пока не понял насколько в Форте считается нормальным временно менять функциональность стандартных слов и символов (в Аде и JSON активно используется двоеточие).

Автор:  gudleifr [ Чт апр 06, 2017 11:12 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
Для меня они...

Изображение

Автор:  dmitry-st [ Чт апр 06, 2017 17:27 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

Вот такая фантазия пока больше всего по душе:
Код:
struct
    UserGroup
    priority: type int, min 1, max 10, default 10
    name: type char, array MAX_GROUP_NAME_LENGTH, default ""
struct;

Можно ли как-то сделать чтобы подобное выполнялось Фортом и в памяти создавалось дерево содержащее числовые и текстовые элементы-константы?

Или это перебор и такой вариант только через посимвольное чтение парсером загружается в Форт?

Автор:  Hishnik [ Чт апр 06, 2017 17:48 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
Пока не понял насколько в Форте считается нормальным временно менять функциональность стандартных слов и символов (в Аде и JSON активно используется двоеточие).

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

Автор:  gudleifr [ Чт апр 06, 2017 18:01 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
Можно ли как-то сделать чтобы подобное выполнялось Фортом и в памяти создавалось дерево содержащее числовые и текстовые элементы-константы?
Меня терзают смутные сомнения. По-моему, Ваши проблемы начались с незнания C. И высокопарные рассуждения о сродстве Lisp и FORTH тут не помогут. Опишите задачу на человеческом языке без всяких "сделать примерно так", "дерево в памяти"...

Автор:  KPG [ Чт апр 06, 2017 18:06 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
Можно ли как-то сделать чтобы подобное выполнялось Фортом и в памяти создавалось дерево содержащее числовые и текстовые элементы-константы?

Или это перебор и такой вариант только через посимвольное чтение парсером загружается в Форт?


Один из шаблонов примерно такой по разборке входного потока в файле без его открытия, а дописав скрипт в начале файла
(мне такой подход нравится в разных вариациях что подскажет фантазия :)
из другой пробегавшей темы на форуме и ещё не оформившейся в окончательный результат (хотя подвижки уже сделаны большие)
Код:
20000 CONSTANT ListLines
: vvv ( -- )
  BEGIN BL WORD   
      DUP C@
            WHILE FIND 0=
                  IF COUNT TYPE ." NOT-FOUND" CR ELSE (DIS) THEN
  REPEAT DROP
;

: view? CR 0
    BEGIN
   REFILL
    WHILE
         vvv \ SOURCE TYPE CR
         DUP 1+ ListLines = IF EXIT THEN
    REPEAT
;
view?
FORTH           DUP             DROP           SWAP            OVER
+               -               *               /              RSHIFT
UCMOVE>         UCMOVE          CMOVE>
CMOVE           FILL            SCAN            SKIP            S=

P.S. Даже базовых возможностей 94 го стандарта достаточно для эффективного парсинга (много ещё и других полезных слов для парсинга есть в стандарте)
Интересны и варианты парсинга, например Си кода, для разных целей (в одном из проектов CWeed на Win32Forth, например, \ нy не могу я без "ссылок" :)
применён для форматирования текста Си кода) Можно и, например, сделать расширяемый аналог подобия CLint, Viva64 и.т.д. с "псевдоисполнением" дерева кода для выявления потенциально возможных ошибок.

Автор:  KPG [ Чт апр 06, 2017 18:47 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

gudleifr писал(а):
dmitry-st писал(а):
Можно ли как-то сделать чтобы подобное выполнялось Фортом и в памяти создавалось дерево содержащее числовые и текстовые элементы-константы?
Меня терзают смутные сомнения. По-моему, Ваши проблемы начались с незнания C. И высокопарные рассуждения о сродстве Lisp и FORTH тут не помогут. Опишите задачу на человеческом языке без всяких "сделать примерно так", "дерево в памяти"...

Может диверсификация разработок с Си на Форт инструментарий :)

Автор:  dmitry-st [ Чт апр 06, 2017 19:16 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

KPG писал(а):
gudleifr писал(а):
dmitry-st писал(а):
Можно ли как-то сделать чтобы подобное выполнялось Фортом и в памяти создавалось дерево содержащее числовые и текстовые элементы-константы?
Меня терзают смутные сомнения. По-моему, Ваши проблемы начались с незнания C. И высокопарные рассуждения о сродстве Lisp и FORTH тут не помогут. Опишите задачу на человеческом языке без всяких "сделать примерно так", "дерево в памяти"...

Может диверсификация разработок с Си на Форт инструментарий :)

Автоматизация однотипного труда программистов)

Автор:  dmitry-st [ Чт апр 06, 2017 19:20 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

gudleifr писал(а):
dmitry-st писал(а):
Можно ли как-то сделать чтобы подобное выполнялось Фортом и в памяти создавалось дерево содержащее числовые и текстовые элементы-константы?
Меня терзают смутные сомнения. По-моему, Ваши проблемы начались с незнания C. И высокопарные рассуждения о сродстве Lisp и FORTH тут не помогут. Опишите задачу на человеческом языке без всяких "сделать примерно так", "дерево в памяти"...

"Дерево в памяти" - какое слово уточнить?

Автор:  gudleifr [ Чт апр 06, 2017 19:27 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
"Дерево в памяти" - какое слово уточнить?
Никакое. Это бессмысленное выражение лишь маскирует Ваше непонимание проблемы. Поэтому я и попросил описать задачу нормальным языком. Что на входе? Что на выходе?

Автор:  dmitry-st [ Чт апр 06, 2017 19:38 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

KPG писал(а):
P.S. Даже базовых возможностей 94 го стандарта достаточно для эффективного парсинга (много ещё и других полезных слов для парсинга есть в стандарте)
Интересны и варианты парсинга, например Си кода, для разных целей (в одном из проектов CWeed на Win32Forth, например, \ нy не могу я без "ссылок" :)
применён для форматирования текста Си кода) Можно и, например, сделать расширяемый аналог подобия CLint, Viva64 и.т.д. с "псевдоисполнением" дерева кода для выявления потенциально возможных ошибок.

Си код парсить отказались) этот вариант уже обсуждали в коллективе. В качестве линта пользуемся cppcheck - он на с++ с правилами в xml, из открытых наверное лучший сейчас.
Вообще думал что на Форте можно будет обойтись без полноценного парсера.

Автор:  KPG [ Чт апр 06, 2017 19:38 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
Автоматизация однотипного труда программистов)

Программу nnCron не рассматривали (основа SP-Forth)?

P.S. Был и такой описан сюжет Тестирование глазами молодого специалиста Вроде на Delphi был и приведён такой или этот проект.
Здесь более подробный пост
Начало заметок здесь

Автор:  dmitry-st [ Чт апр 06, 2017 19:44 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

gudleifr писал(а):
dmitry-st писал(а):
"Дерево в памяти" - какое слово уточнить?
Никакое. Это бессмысленное выражение лишь маскирует Ваше непонимание проблемы. Поэтому я и попросил описать задачу нормальным языком. Что на входе? Что на выходе?

На входе:
Код:
struct
    UserGroup
    priority: type int, min 1, max 10, default 10
    name: type char, array MAX_GROUP_NAME_LENGTH, default ""
struct;

На выходе:
Код:
struct UserGroup {
   int priority;                     /* 1..10, default 10 */
   char name[MAX_GROUP_NAME_LENGTH]; /* default "" */
};

Автор:  gudleifr [ Чт апр 06, 2017 19:59 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

dmitry-st писал(а):
На входе:... На выходе:...

1. А в чем тут автоматизация?
2. Это легко делает #define
3. На C так не пишут (слишком много будет лишних проверок и копирования областей памяти)

Страница 3 из 6 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/