Функциональное программирование на языке Форт
От: Didro Россия home~pages
Дата: 02.08.07 15:33
Оценка: 5 (2)
Статья, автор — Пётр Советов. Ссылка — здесь
На RSDN-e не видел.

Кстати вот ещё интересная штуковина. OpenSource Смартфон с ForthOS на борту.
Re: Функциональное программирование на языке Форт
От: Didro Россия home~pages
Дата: 02.08.07 18:19
Оценка:
Есть ли примеры языков или инструментов, которые позволяют также легко обращаться с синтаксисом подопытного языка как Форт? Форту хорошо, у него даже парсера нет как такого, ибо максимальная единица синтаксиса — слово. Т.е. нет грамматики языка Форт (тем более что это не совсем язык), по которой нужно генерировать парсер и т.д.

Насколько мне известно, определенными возможностями по изменению синтаксиса обладают почти все языки (Lisp, Nemerle, C++, Prolog), есть и инструменты типа MPS для Java, R# для C#, gump для Mozart-Oz. Но большинство из них (из тех, что известны мне) обладают определенными ограничениями. Так, например R# и Gump работают только в рамках грамматик базовых языков (C# и Mozart-Oz соответственно) и выйти за пределы этих грамматик не получится. А хотелось бы. Лично мне это нужно в чисто исследовательских целях. Не знаю, будет ли практическая ценность от такого инструмента, так что можно рассматривать это просто как интересную задачу из computer science.

Т.е. в общем случае, если говорить о технологическом, а не о промышленном решении, нужен расширяемый парсер. Не понятно только, что считать расширяемым парсером
Автор: INTP_mihoshi
Дата: 01.06.04
? Собственно имя грамматику языка мы всегда можем её изменить -> сгенерировать парсер -> получить новую грамматику. Хотелось бы как-нибудь автоматизировать этот процесс или найти другое(принципиально) решение.

Есть идеи?
Re[2]: Функциональное программирование на языке Форт
От: mkizub Литва http://symade.tigris.org
Дата: 02.08.07 20:31
Оценка: 14 (1)
Здравствуйте, Didro, Вы писали:

D>Есть ли примеры языков или инструментов, которые позволяют также легко обращаться с синтаксисом подопытного языка как Форт?


Если оставаться в рамках текстового представления программы — то это XL (http://mozart-dev.sourceforge.net/)

D>или найти другое(принципиально) решение.


Принципиально другим будет отказ от текста как базового представления программы — тогда "синтаксиса" не будет
по определению, и проблем с ним не будет. Вот так, например
http://www.symade.org/
(или статья на русском http://www.symade.org/SOP_and_SymADE.doc)

Более работоспособная версия той-же идеи — http://www.jetbrains.com/mps/, но реализация проприетарная, так же как и где-то готовящаяся (совершенно по партизански) реализация Intentional Programming.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[2]: Функциональное программирование на языке Форт
От: night beast СССР  
Дата: 03.08.07 06:34
Оценка: 7 (1)
Здравствуйте, Didro, Вы писали:

D>Есть ли примеры языков или инструментов, которые позволяют также легко обращаться с синтаксисом подопытного языка как Форт? Форту хорошо, у него даже парсера нет как такого, ибо максимальная единица синтаксиса — слово. Т.е. нет грамматики языка Форт (тем более что это не совсем язык), по которой нужно генерировать парсер и т.д.


D>Есть идеи?


что-то похожее можно в tcl сделать.
не так хорошо как в форте правда.
Re[2]: Функциональное программирование на языке Форт
От: Gaperton http://gaperton.livejournal.com
Дата: 03.08.07 07:40
Оценка: 24 (2)
Здравствуйте, Didro, Вы писали:

D>Есть ли примеры языков или инструментов, которые позволяют также легко обращаться с синтаксисом подопытного языка как Форт? Форту хорошо, у него даже парсера нет как такого, ибо максимальная единица синтаксиса — слово. Т.е. нет грамматики языка Форт (тем более что это не совсем язык), по которой нужно генерировать парсер и т.д.


D>Насколько мне известно, определенными возможностями по изменению синтаксиса обладают почти все языки (Lisp, Nemerle, C++, Prolog), есть и инструменты типа MPS для Java, R# для C#, gump для Mozart-Oz. Но большинство из них (из тех, что известны мне) обладают определенными ограничениями.


Lisp и Forth — языки без грамматики, или — со свободной грамматикой. Их "синтаксис" можно менять без ограничений. Также рядом совершенно справедливо упомянули tcl — замечательный метаязык, на котором, например, можно делать "исполняемые конфигурационные файлы" — конфиг, который представляет собой на самом деле скрипт, который можно запустить.

D>Т.е. в общем случае, если говорить о технологическом, а не о промышленном решении, нужен расширяемый парсер. Не понятно только, что считать расширяемым парсером
Автор: INTP_mihoshi
Дата: 01.06.04
? Собственно имя грамматику языка мы всегда можем её изменить -> сгенерировать парсер -> получить новую грамматику. Хотелось бы как-нибудь автоматизировать этот процесс или найти другое(принципиально) решение.


"Расширяемый парсер" — это макропроцессор camlp4 для OCaml. Он позволяет описывать отдельно грамматические расширения, и динамически их подключать. camlp4 — это не генератор парсеров, это расширение языка.

В расширении вашей грамматики, которое оформляется как независимый исходный модуль на camlp4, вы можете точно указать, как именно вы модифицируете базовую грамматику — что-то удалить, что-то добавить. Эта связка специально предназначена для экспериментов с языкоми программирования. На данный момент, это единственный "расширяемый парсер", и tool of choice для прототипирования компиляторов.
Re[2]: Изменение синтаксиса
От: z00n  
Дата: 03.08.07 13:56
Оценка: 38 (3) :)
Здравствуйте, Didro, Вы писали:

D>Насколько мне известно, определенными возможностями по изменению синтаксиса обладают почти все языки (Lisp, Nemerle, C++, Prolog), есть и инструменты типа MPS для Java, R# для C#, gump для Mozart-Oz. Но большинство из них (из тех, что известны мне) обладают определенными ограничениями. Так, например R# и Gump работают только в рамках грамматик базовых языков (C# и Mozart-Oz соответственно) и выйти за пределы этих грамматик не получится. А хотелось бы. Лично мне это нужно в чисто исследовательских целях. Не знаю, будет ли практическая ценность от такого инструмента, так что можно рассматривать это просто как интересную задачу из computer science.


Вообще, все, чего вам хочется — не проблема. Систем изменения синтаксиса языков — несть числа: ASF-SDF2 и Stratego, TXL, Strafunski, в некотором роде ANTLR, и любимый мной XTC-Rats!. Проблемой остается С++, зато c С, Java и другими языками, для которых реально написать парсер, можно делать все, что угодно

http://cs.nyu.edu/rgrimm/xtc
http://www.program-transformation.org

D>Т.е. в общем случае, если говорить о технологическом, а не о промышленном решении, нужен расширяемый парсер. Не понятно только, что считать расширяемым парсером
Автор: INTP_mihoshi
Дата: 01.06.04
? Собственно имя грамматику языка мы всегда можем её изменить -> сгенерировать парсер -> получить новую грамматику. Хотелось бы как-нибудь автоматизировать этот процесс или найти другое(принципиально) решение.


Расширяемый парсер — это парсер который допускает хотя-бы композицию (union) грамматик. LL, LR и LALR не такие, но есть GLR(SDF2 от ASF и Stratego) и PEG(Rats!), который поддерживает еще и пересечение и дополнение. Т.е. при наличии грамматики языка, мы просто дописываем грамматику расширений и потом втыкаем ее в старую грамматику. В последней версии XTC парсер Java 1.5 реализован как 5 дополнительных модулей к парсеру Java 1.4, общим весом 392 строки с комментариями.

Тут еще недавно пробегала дипломная работа: Chris Seaton, A Programming Language Where the Syntax and Semantics Are Mutable at Runtime
Re[3]: Изменение синтаксиса
От: BulatZiganshin  
Дата: 03.08.07 20:00
Оценка:
Z>Вообще, все, чего вам хочется — не проблема. Систем изменения синтаксиса языков — несть числа: ASF-SDF2 и Stratego, TXL, Strafunski

единственный Strafunski, которого находит гугл — это библиотека generic программирования
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Изменение синтаксиса
От: z00n  
Дата: 03.08.07 23:51
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>единственный Strafunski, которого находит гугл — это библиотека generic программирования


Это он самый.

A Strafunski Application Letter
...Abstract. Strafunski is a Haskell-centred software bundle for implementing
language processing components — most notably program analyses and transformations.
Typical application areas include program optimisation, refactoring,
software metrics, software re- and reverse engineering.

Strafunski started out as generic programming library complemented by generative
tool support to address the concern of generic traversal over typed representations
of parse trees in a scalable manner. Meanwhile, Strafunski also encompasses
means of integrating external components such as parsers, pretty printers,
and graph visualisation tools.
...

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.