Forth
http://fforum.winglion.ru/

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

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

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

1. А в чем тут автоматизация?

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

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

dmitry-st писал(а):
надо генерировать...
Т.е. с "выходом" Вы уже нажульничали. Как же Вам помогать, если половина задачи еще "где-то рядом"?

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

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

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

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

nnCron на линуксе думаю мало полезен)
За статьи благодарю! Очень понравились. Читаю)

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

gudleifr писал(а):
dmitry-st писал(а):
надо генерировать...
Т.е. с "выходом" Вы уже нажульничали. Как же Вам помогать, если половина задачи еще "где-то рядом"?

Я в сообщении которым открыл тему писал про *.h и *.c
Искренне сожалею что мы не находим общего языка.

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

dmitry-st писал(а):
Искренне сожалею что мы не находим общего языка.
Дык, в том и проблема. Вы сами не можете точно сказать, что надо сделать... Распишите полные "вход" и "выход"!

Впрочем, эту тему вполне можно закрывать, т.к. FORTH для таких задач - это стрельба из пушек по воробьям.

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

dmitry-st писал(а):
Искренне сожалею что мы не находим общего языка.

Да это как раз нормально. Вот спартанцы в древности выводили к молодежи пьяных рабов - просто чтобы показать, до чего доводит пьянство. Я уже приводил пример глуповатого, но наглого шута при замке, который искренне считает, что все тут принадлежит ему.
gudleifr писал(а):
Впрочем, эту тему вполне можно закрывать, т.к. FORTH для таких задач - это стрельба из пушек по воробьям

Например, вот такими сообщениями. Разрешил он, ага... :lol:


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

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

Hishnik писал(а):
Например, вот такими сообщениями. Разрешил он, ага... :lol: .

Это не единственный форум где он пытается закопать Форт его же методами :)
Из последнего c форума игроделов и не в одной теме
не считая другие форумы (в частности на площадке AirForum Balancera)

P.S. При таком уровне активности, почему то, ещё нет бумажного признания Gudleifr в информационном пространстве. :)

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

KPG писал(а):
При таком уровне активности, почему то, ещё нет бумажного признания Gudleifr в информационном пространстве.

Потому что в рецензируемых изданиях желчные статьи про тупых пользователей благополучно выбрасываются в мусор. Это интернет все стерпит.

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

Hishnik писал(а):
...
Блин, опять я обломал нашего маркетоида. Он уже на новый рынок сбыта начал слюни пускать, а, оказывается, тут надо начала программирования знать.

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

gudleifr писал(а):
Вы сами не можете точно сказать, что надо сделать... Распишите полные "вход" и "выход"!

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

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

Прикладываю вывод с одной функцией.

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


Выход для *.h
Код:
struct UserGroup {
   int priority;                     /* 1..10, default 10 */
   char name[MAX_GROUP_NAME_LENGTH]; /* default "" */
};


Выход одной функции для *.c
Код:
short set_UserGroup_priority( struct UserGroup const * userGroup, int value )
{
    if ( NULL == userGroup )
    {
        fprintf( stderr, "%s(%d): %s: Error userGroup = NULL.\n",
                         __FILE__, __LINE__, __func__ );
        return ER_INVAL;
    }

    if ( value < 1 || value > 10 )
    {
        fprintf( stderr, "%s(%d): %s: Error value: %d.\n",
                 __FILE__, __LINE__, __func__, value );
        return ER_INVAL;
    }

    userGroup->priority = value;
    return 0;
}


p.s. Умышленно упрощаю задачу, поэтому здесь нет макросов, констант и т.п. Добавление подробностей по моему только отодвигает от создания минимально рабочего прототипа.

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

dmitry-st писал(а):
Абсолютно полный "вход" и "выход" для живой системы никогда не расписывают в принципе, но закладывают необходимую гибкость и возможности роста.
Это обычная ошибка. Точнее две. Описывают всегда - просто, возможно, другими языковыми средствами. И "необходимая гибкость" и "возможность роста" - это опять про маркетоидов.
dmitry-st писал(а):
Я уже понял Ваш подход к работе с данными в Си, он называется "прибить данные к коду гвоздями намертво" - для очень больших проектов типа нашего это означает мёртвый кусок кода, который все обходят стороной и не дай Бог там какая-то структура изменится.
Опять ерунду пишете.

Давайте посмотрим на Вашу задачу.
1. Вы хотите, чтобы имея на входе описания своих хотелок относительно некоторых объектов данных, на выходе иметь [код библиотеки] с полным(sic!) набором безопасных операций над этим объектом. Более подробно задачу Вы не видите - "гибкость", "крупные проекты", "данные раздельно друг от друга" и прочая обычная лабуда, свидетельствующая о нежелании думать.
2. Конечно, у программиста должна бы сразу возникнуть мысль "за нафига использовать такой формат данных, поддержка которого становится отдельным геморроем?". Но, допустим, мы, действительно, взяли за цель написать базу данных, а читать учебник нам лень... Хоор в гробу переворачивается...
3. Попробуем немного формализовать. На входе - набор фактов: "X - структура", "Y - поле X", "Y целое", "Y in [1,10]"... На выходе - .h (состоящий из перевода части фактов в C-структуры, а части в комментарии) и .c (состоящий из набора функций, волшебным образом связанных с нашим набором фактов). Совершенно непонятно, почему автору задачи не пришло в голову записать все необходимые факты в .h файл...
4. Как нам получить "волшебство" в .c-файле? Очевидно, одним-единственным образом - заранее создав набор шаблонов, в которые нужно вбивать имена структур и полей. Первая же попытка чтения хотелок автора задачи дает нам необходимость многоэтажных шаблонов: внутрь типового шаблона "присвоить значение поля" (с его очевидными вставками "имен", "типов" и чайниковски-обязательной "проверки существования") надо вставить шаблон "проверка допустимости значения", выбранный в зависимости от "типа". Если бы мы были программистами, мы бы, конечно, заметили, что вычисляемые на этом этапе данные вполне заменяют те, что мы хотим использовать в окончательном выводе (и надо возвращаться к п.2), но мы же договорились, что тупы и все непонятное считаем "прибиванием данных гвоздями".
5. Ах, да. Еще надо добавить "макросов, констант и т.п.". А еще... Блин, а вы не заметили, что мы уже получили обычный C++ template? Что для удобства подобного быдлокодинга и был изобретен этот самый С++ в своем современном виде?
6. Итак, мы имеем набор шаблонов, над которым надо выполнять две операции: заполнять данными и радоваться; вносить исправления для "гибкости, роста и макросов". На чем это писать? Очевидно, awk (perl)... (Был бы злым, написал trac). Но... Еще очевиднее, что и шаблоны, и входные данные можно порубить квадратно гнездовым методом и всю программу "преобразования" записать (на C) в виде одного несчастного цикла вокруг printf () с выборкой из таблиц "фактов".
7. Примеров приводить не буду, все равно, до этого места никто не дочитает...

Итак, что делать?
1. Учить матчасть. Если данные обладают избыточностью, позволяющей изобрести для них общие операции, их надо нормализовать.
2. Научиться работать с макросами.
3. Научиться преобразовывать текстовые файлы без создания "деревьев в памяти".
4. Научиться использовать 'nix - инструментарий.
5. Плюнуть на все на это и уйти в маркетоиды, если осталась вера в то, что слова "как-то так" в ТЗ означают "гибкость и рост", а не немедленное увольнение.

Автор:  gudleifr [ Пт апр 07, 2017 13:33 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

P.S. Кстати, если на этом Форуме были бы фортеры, они бы заметили, что в приведенном выше примере:
http://gudleifr.forum2x2.ru/t5-topic
именно требуемое и сделано - вводятся в свободном формате некоторые неформализованные данные, которые затем макроподставляются в процедуру рисования.

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

dmitry-st писал(а):
Прикладываю вывод с одной функцией.

Это уже интересно

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

Почти так. Однако priority заранее не определено, и тогда надо будет как-то делать struct очень мощным. Универсальная вещь - CREATE

Код:
struct UserGroup
   int priority
      1 min
      10 max
      10 default
   char[] name
     MAX_GROUP_NAME_LENGTH size
struct;


Пока это только набросок, потому что в Форте не хватает одного важного слова - что-то типа this.name. Конкретно, при использовании внутри слова оно должно класть на стек имя этого слова. Тогда получается так
Код:
: int CREATE #int , ( записываем тип ) DOES> @ ... записываем в выходной файл "int" ... this.name ....


Однако можно сделать и не на базе CREATE, а скопировав его поведение. Тогда
Код:
: int
  PARSE AddFieldName
  #int AddFieldType
;
: min SetFieldMin (с реализацией вида MINS[] LastEntry -TH ! )


В конечном итоге после интерпретации наборов Struct у нас должен получиться набор массивов, содержащих имена полей, их типы (можно индексами) и min/max/default. Потом можно пройти по массиву и записать в выходной файл готовые шаблоны кода (их придется сделать заранее) со вставкой name/type/min/max/default в нужных местах.

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

Hishnik писал(а):
...
Не, дураков учить - только портить. Объяснял же специально - как делаются символьные атомы - http://fforum.winglion.ru/viewtopic.php?p=41636#p41636, так как наш маркетоид вонял! В приведенном выше примере, этот способ, очевидно, использован. Мы будем учиться читать?

Автор:  vpn289 [ Пт апр 07, 2017 21:19 ]
Заголовок сообщения:  Re: Генератор на Форте кода для C

Hishnik писал(а):
Пока это только набросок, потому что в Форте не хватает одного важного слова - что-то типа this.name. Конкретно, при использовании внутри слова оно должно класть на стек имя этого слова. Тогда получается так
Код:
: int CREATE #int , ( записываем тип ) DOES> @ ... записываем в выходной файл "int" ... this.name ....


Если я правильно понял.
Код:
: autoname:     HERE CREATE LATEST ,  DOES> @ ;

autoname: abd   
abd COUNT TYPE
_abd_ 


Или это просто LATEST ? Которое кладет на стек nfa последнего определенного слова. При применении внутри определения кладет адрес поля имени самого этого определения.

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