воскресенье, 26 февраля 2012 г.

Интерпретаторы и компиляторы. Part 3.


В этой части мы сосредоточимся на грамматиках и иерархии Хомского.
Грамматику, по Хантеру, можно рассмотреть как следующую структуру:
(VT, VN, P, S)
VT – алфавит терминалов,
VN – алфавит нетерминалов,
Необходимо отметить, что множества VT и VN не пересекаются, а их объединение будем обозначать V.
P – множество правил. Каждое правило состоит из левой и правой частей и записывается так: q r.
S – аксиома грамматики. С неё начинается генерация строк языка с данной грамматикой.
Теперь мне бы хотелось процитировать Хантера: “Грамматика используется для генерации последовательностей символов составляющих строки языка, начиная с аксиомы и последовательно заменяя её с помощью одного из порождений грамматики”.

суббота, 25 февраля 2012 г.

Интерпретаторы и компиляторы. Part 2.

Продолжаем наш разговор об интерпретаторах и компиляторах. Сегодня опять в большей степени я буду касаться теоретических вопросов, потому что до практики пока довольно далеко. Да и хотелось бы обсудить некоторые интересные вещи, связанные с языком и его представлением. Ряд положений может показаться довольно банальными, но попрошу вас немного потерпеть, потому что на их базе мы будем строить всё наше здание.
Поговорим немного о синтаксических конструкциях.

четверг, 23 февраля 2012 г.

ProcessWatcher. Part 3.

      Ну а теперь я предлагаю кратко рассмотреть программный код. Хочу сразу предупредить: код писался примерно с такой же скоростью, с какой мысли, по поводу того, что и как я хочу видеть в окошке консоли, у меня появлялись. Т.е. другими словами никакого предварительного планирования архитектуры не производилось и к правомерности использования тех или иных функций должного внимания уделено не было. Через некоторое время стало ясно, что list - скорее всего был не лучший вариант, нужно будет немного подумать и переписать, если лень не сделает свое дело)). Ну и сам набор методов можно было спроектировать по другому, более универсально. Но всё это дело недалёкого будущего, пока у нас есть некоторая база, с ней и будем работать.

воскресенье, 19 февраля 2012 г.

ProcessWatcher. Part 2.

      Хотя официальной Part 1 не было, в дальнейшем я буду так именовать странички посвященные той или иной теме. Всякий лишний трёп буду стараться от сюда убирать и говорить только по теме. Ну так вот, продолжаю своё славное дело - работу над ProcessWatcher. Вчера меня эта идея серьёзно зацепила, поэтому сегодня решил немного поработать в этом же направлении. Просто хочется отдохнуть от той рутины, которой приходится заниматься ежедневно.

суббота, 18 февраля 2012 г.

   Сегодня довольно жуткий день.
   Вместо того, что бы ехать на горячие источники, я заболел и торчу дома ((( !!!!
   Но! Как говориться нет худа без добра! У меня наконец таки появился свободный вечерок, а следовательно возможность пореализовывать свои разные странные идеи.

среда, 15 февраля 2012 г.

   Недавно наткнулся в интернете на лекции по физике Ричарда Фейнмана. Вещь просто потрясающая! Очень советую посмотреть! Найти можно на rutracker.org, там есть лекции которые Фейнман читал в Корнелльском университете. Говорит он естественно на английском, но есть субтитры, что очень радует. Всего лекций 4, и все они проходят под единым названием: "The character of physical low".

вторник, 14 февраля 2012 г.

   Не отпускает меня всё таки идея про создание собственного интерпретатора.
   Ну вот опять в голове созрела, а точнее выкристаллизовалась определённая мысль!
   Раньше я немного пробовал писать на эту тему, но получилось довольно коряво и скучно.
   Попробую забыть всё и построить заново.
   Итак!
   Цель: создать ядро интерпретатора языка "Basic" (простите, пока пусть будет он, может быть в будущем сделаю реализации, чего-нибудь более интересного) на языке C. Почему только ядро и почему на C? Ответ достаточно просто: чтобы его можно было использовать во встраиваемых системах (Embedded systems).
   Думаю дальнейшее повествование этого процесса буду вести в форме рассказа, ну просто мне так хочется, это же не научная статья. 
   На сегодняшний день написано достаточно много книг по компиляторам и интерпретаторам, перечислять их пока не буду. Наверно среди них достаточно достойных и таких, которые в руки вообще брать не стоит. На первом этапе этого творческого пути я буду опираться на "Основные концепции компиляторов" Робина Хантера. Непривычно тонкая книга (зато удобно таскать), но коротко и по делу излагает материал.
   По сути компилятор состоит из двух больших частей. Первая реализует функцию анализа, вторая - синтеза. Для наших целей синтез в принципе не нужен. Это конечно очень интересная тема, но, я думаю буду касаться её довольно редко. Разве что, если будут появляться интересные идеи, и информация, которой захочется поделиться.   
   Как понятно из названия на этапе анализа производится анализ исходного кода программы, а на этапе синтеза - генерация машинного кода целевой системы. Давайте пока поговорим о более общей теме - компиляции.
   Эх эта тяга ко всеобщей унификации и упрощению! У меня кстати тоже присутствует, но только чисто из практических соображений. А в принципе очень хочется всегда сделать, что-нибудь своё, уникальное и неповторимое. НО! в унификации и упрощении (смотря с какой конечно стороны смотреть) есть свои плюсы. Плюсы будем рассматривать чисто со своих эгоистичных позиций. Первый плюс:с точки зрения исследователя задача создания универсальной системы очень интересная. Она заставляет подниматься на более высокий уровень и охватывать проблему целиком. Второй плюс: люди тебе скажут спасибо, если они без лишних телодвижений смогут работать с твоим творением. Третий плюс: в будущем тебе будет проще поддерживать существующие наработки и создавать новое.
  В компиляции по видимому унификация и упрощение - вопросы волнующие не одну светлую голову. Ну так вот, среди мне наиболее интересными кажутся идеи:
1. Универсального промежуточного языка. Суть в том, что мы все известные языки транслируем в один универсальный, а дальше уже его перерабатываем в код целевого процессора. Так, если у нас есть p языков и q платформ, нам нужно "всего лишь" реализовать p*q программных систем.
2. Компилятор компиляторов. Эта идея сильно перекликается с предыдущей. Суть в том, что есть программа, на вход ей подаём описание языка и целевой платформы (напр. x86, ARM и т.п.), а на выходе получаем компилятор с данного языка в нужный машинный код. КРАСОТИЩА!
   Ну пока на сегодня хватит, закругляюсь)))