вторник, 22 сентября 2009 г.

Учимся "говорить" (Part 3 - Анализаторы)

     Перед тем, как начать какие-либо телодвижения в соответствии с заданной программой (написанной на Small Basic), в начале необходимо проанализировать её исходный код.
     Этап анализа состоит из трёх фаз: Лексический анализ (ЛА), Синтаксический анализ (СА) и Семантический анализ (СмА).
     Теперь кратко пройдёмся по ним.
     В ходе Лексического анализа из исходного набора знаков (исходный код) формируются символы языка (или лексемы - это переменные, ключевые слова языка for, if и т.п.). ЛА не работает с контекстом, т.е. последовательность символов значения не имеет.
     ЛА решает следующие задачи:
1. Преобразование знаков в символы.
2. Обработка пробелов.
3. Удаление комментариев.
     На сегодняшний день существуют уже готовые инструменты для построения ЛА. Одним из таких мы и воспользуемся в дальнейшем.
     В ходе Синтаксического анализа определяется структура программы. СА работает с контекстом, используя символы полученные при ЛА. Результатом работы СА является описание программы в форме дерева (синтаксическое дерево).
     СА считывает символы и проверяет получаемую последовательность на ошибки. В дальнейшем рассмотрим два метода СА: метод рекурсивного спуска и SLR(1).
     СА так же как и ЛА может быть построен автоматически:
     В ходе Семантического анализа решаются проблемы совместимости типов переменных, области видимости и т.д.

     P.S. В следующий раз немного поговорим о грамматике и языке. И более подробно изучим Лексический анализатор: сделаем свои первые наброски этого чуда, а так же попробуем автоматизировать данный процесс.

воскресенье, 13 сентября 2009 г.

info

Постараюсь обновляться не реже одного раза в неделю)

вторник, 8 сентября 2009 г.

Учимся "говорить" (Part 2 - Цель)

Попробую более чётко сформировать цель. Буду (в перспективе надеюсь скажу "БУДЕМ", но пока я один) писать интерпретатор языка Basic под микроконтроллер AVR ATmega16 (если места не хватит, перелезу на более ёмкий контроллер, просто этот под рукой оказался). Под Basic'ом понимается диалект Small Basic (см. книжку Герберта Шилдта "С для профессиональных программистов" 1989 г.). Маленькое отступление по поводу этой книжки. В ней представлен подход к разработке интерпретатора Small Basic со всеми исходниками. Текст программы в ней написан на K&R C (я естественно только за ANSI С). Но копировать чужой код как-то не хочется (мы же учимся, результат не особо важен, сам процесс - ВОТ ЧТО ГЛАВНОЕ) поэтому из неё будут взяты только правила Small Basic.
Вот особенности этого языка (перечислю пока то, что нужно знать для построения синтаксического анализатора (подробности потом)):
1. Все переменные обозначаются одной буквой. Т.е. мы имеем двадцать шесть переменных (A-Z).
2. Переменные разных регистров не отличаются друг от друга.
3. Все числа являются целыми.
4. Символьные переменные не поддерживаются.
Пока этого хватит, остальное буду добавлять по мере необходимости. (Когда все правила языка будут сформулированы, объединю их в одном посте).

В качестве языка программирования (как уже было сказано выше), на котором этот интерпретатор будет писаться, возьму ANSI C.
Компилятор: WinAVR (+ все дополнительные приблуды к нему).
Среда разработки: AVR Studio.
Отладка будет происходить в VMLab и Proteus (иногда, для тренировки, на реальном железе).
Отдельные моменты будут тестироваться на PC (работа всяких анализаторов). В таком случае компилятор: gcc под Linux.

Все исходные коды, файлы проектов и модели буду так же выкладывать в общий доступ.
P.S. "Счастья для всех, Даром, и пусть никто не уйдёт обиженным" (с) Стругацкие

Интересные поделки (шасси)

Представляю вам творение одного моего товарища "Тахиона експлужена" (да-да именно так его звать). Чувак просто мастер творить всякие срывающие мозг шасси для разных робототехнических штук. Причём (как видно из фоток ниже) предпочитает детский железный конструктор. Это одна из его поделок: мини-фрезерный станок. Правда на нём нет одной детали: шпинделя (фрезерной головки) и привода с редуктором для неё. И отсутствует очень важная вещь!!! Это контроллер! Вот сижу и думаю, может потратить драгоценное время и сварганить для фрезера "мозги" и софта для них написать... (у создателя видать лень не дала этим заниматься, Тахионыч! это камень в твой огород). Кстати, на нём можно по-координатно привода подключать)))) прикольно))).
Если интересно, могу более подробно описать его особенности.
P.S. У чувака есть ещё прикольные поделки... сфоткаю - выложу)