Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Предложение по Учебному Проекту № 3

87
02 ноября 2010 года
Kogrom
2.7K / / 02.02.2008
Иногда возникают попытки обсудить темы "архитектур виртуальных машин, компиляторов, лексеров и прочего". Возможно, на форуме есть специалисты кроме hardcase, которые разбираются в этом, но об этом трудно судить. Поэтому есть идея создать практическую тему, в которой этот вопрос будет подробно рассмотрен.

Предлагаю создать Учебный Проект по созданию языка программирования (ЯП). Тут можно будет рассмотреть разные инструменты типа bison, можно будет обсуждать всякие парадигмы ЯП, виртуальных машин и т.д.

Какие тут плюсы? Первый: такая практика (создание ЯП) интересна мне самому. Второе: теоретически, у проекта могут быть кураторы, раз тема интересна. Третье: возможно, на форуме есть другие люди, которым такая практика может пригодится.

Потенциальные минусы. У меня уже есть некоторое представление о том, какой ЯП буду создавать. Это не будет ещё один клон Хаскеля или Лиспа. Скорее, что-то похожее на классические компилируемые языки, типа C++ или Паскаля, но с некоторыми принципиальными отличиями. Соответственно, и ТЗ напишу я.

Кроме того, если не будет веских аргументов против, то буду использовать именно bison или какие-то другие клоны yacc, ибо классика.

Есть у кого-нибудь идеи, предложения, пожелания?
Страницы:
5
23 декабря 2010 года
hardcase
4.5K / / 09.08.2005
Вот еще одна интересная статья на тему языкостроения: Ela. Разработка интерпретируемого языка программирования на .NET Framework.
87
02 января 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: Kogrom
Надо провести некоторую подготовительную работу. Как раз до Нового Года и продлится, наверное.



Новый Год прошёл...
За подготовительный период я ознакомился с лексическими и синтаксическими анализаторами, с некоторыми подходами к реализации семантического анализа (последнее больше в теории).

Сейчас могу наклепать простейший интерпретатор с переменными и встроенными функциями. Есть некоторое смутное понимание, как сделать интерпретатор с циклами, пользовательскими функциями. Но тут я пока не совсем осознал, как красиво связать синтаксический анализатор с частью, отвечающую за семантику (пока пытаюсь использовать тут машину со стековой организацией). Как сделать компилятор - представляю совсем слабо, хотя делал простейший транслятор, приведённый в "книге Дракона".

Книгу читал, но пока не всю осилил. Не совсем согласен, что в ней "много ненужной математики", но согласен, что там много того, что мне сейчас не нужно. Например, там долго и нудно объясняется как преобразовать НКА в ДКА. Оно может и пригодится при каких-то оптимизациях, или при создании анализаторов, но это не то, что мне требуется в первую очередь для этого проекта.

Не совсем выбраны и инструменты. Я ознакомился с bison и PLY. Пока мало что могу сказать. Есть ощущение, что с PLY легче сделать всё в привычном ООП-шном стиле. Посматриваю в книжонку про OCaml, но использовать не рискую, ибо если уж его принять, то придётся вначале вдумчиво изучать сам язык, на что может уйти год и более.

Если сейчас начинать коллективную работу, то получится как в случае, когда один слепой вел другого и оба упали в яму. Тут желающим действительно лучше присоединиться к разработке Nemerle...

В принципе, можно пересмотреть формат проекта. Например, реализовывать интерпретаторы языка hoc, используя разные инструменты. Кто-то будет разрабатывать на F#, кто-то на C#, кто-то на Java, я на Python... Потом можно будет сравнивать версии по разным параметрам.

2.1K
02 января 2011 года
Norgat
452 / / 12.08.2009
У меня перед НГ было некоторое свободное время и свободный ноут дома(в моём основном компе сгорела видеокарта, как пройдут праздники - пойду куплю новую).

Я поигрался с использованием FsLex и FsYacc - принципы их работы понятны и не особо сложны. Остановился на том, что пытаюсь понять, как правильно самостоятельно строить грамматики и переводить их в код для Yacc (хочется именно вкурить как это делается, а не копировать уже существующие грамматики). Причём для освоение FsLex, FsYacc использовал статьи по OCamlLex, OCamlYacc, т.к. это копии этого лексера и парсера.

Цитата:
Посматриваю в книжонку про OCaml, но использовать не рискую, ибо если уж его принять, то придётся вначале вдумчиво изучать сам язык, на что может уйти год и более.



Ну это преувеличенно, имхо. У меня ушло 1.5-2 недели на то, чтобы понять как писать на F#, после этого я только шлифую свои навыки и изучаю возможности библиотек F# и .Net, с Ocaml думаю будет аналогично (особенно если учесть, что есть перевод одной книги на русский по OCaml, а для F# у меня был только русский MSDN).

87
03 января 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: Norgat
Ну это преувеличенно, имхо. У меня ушло 1.5-2 недели на то, чтобы понять как писать на F#, после этого я только шлифую свои навыки и изучаю возможности библиотек F# и .Net, с Ocaml думаю будет аналогично (особенно если учесть, что есть перевод одной книги на русский по OCaml, а для F# у меня был только русский MSDN).



Тут проблема вот в чём. Когда я начинал изучать Python, то первые полгода программы сложнее хелловорлда я писал на Python как на C++. Cинтаксис был питоновский, а вся логика соответствовала C++. Во многом и сейчас это осталось. Я почти не сомневаюсь, что и на OCaml я быстро научусь писать программы в духе C++. Но есть ли смысл?

Но спорить можно долго. Тут лучшим показателем был бы некий турнир по реализации определённого языка с помощью различных технологий. Потому я всё-таки прошу потенциальных участников рассмотреть вот этот язык для реализации:
http://en.wikipedia.org/wiki/Hoc_(programming_language)

Реализация версии на bison, с проектом для Code::Blocks - в прикреплённом архиве. Основана на этой версии для yacc:
http://netlib.bell-labs.com/~bwk/hoc.sh

2.1K
03 января 2011 года
Norgat
452 / / 12.08.2009
Цитата: Kogrom
Тут проблема вот в чём. Когда я начинал изучать Python, то первые полгода программы сложнее хелловорлда я писал на Python как на C++. Cинтаксис был питоновский, а вся логика соответствовала C++. Во многом и сейчас это осталось. Я почти не сомневаюсь, что и на OCaml я быстро научусь писать программы в духе C++. Но есть ли смысл?



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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог