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 Для меня они как две основы на которых строятся все остальные языки. Наш разговорный язык тоже состоит из смеси префиксной и постфиксной нотации. Программа написанная на инфиксном языке, например, на 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/ |