Первые версии “Введения в ANTLR” и “Введения в CIL”

Замечание! Все туториалы переехали по адресу

Небольшое вступление…

Уже несколько лет я читаю курс “Введение в компиляторы” на кафедре ПО в ИжГТУ (на заочном, втором высшем). За это время (и время чтения других курсов) я понял, что основная проблема у студентов – это сложность перехода от теории к практике, особенно, когда они не связаны явно.

Как правило, на лекции рассматриваются общие подходы (алгоритмы/методы), а на практике хочется предложить реализовать, по возможности, максимально близкие к практике задачи. В результате, например, в моем курсе практическая часть состоит в разработке компилятора с простого императивного языка на IL (Intermediate Langage). При этом я предлагаю студентам не писать разбор руками (хоть это и может быть полезно в образовательных целях), а воспользоваться готовым инструментом, таким как ANTLR или, например, GPLEX/GPPG и Coco/R, …

И как оказывается, что самой большой проблемой становится сделать первые шаги, начать… Особенно явно это заметно именно у студентов-заочников. Если студент очного отделения (который, в теории, 100% своего времени тратит на учебу – в университете или самостоятельно), за счет большого запаса времени, может в принципе худо-бедно, но разобраться в материале, то у студнтов-заочников (которые, как правило, все поголовно заняты на полный рабочий день) этого сделать не получается…

К чему я написал все эти банальности?

Собственно, по прошествии нескольких лет, я все-таки нашел в себе силы и сел писать набор небольших введений (не хочется писать “методичек”, тем более, что это и не методички, а именно введения) в различные инструменты и технологии. Процесс идет со скрипом, но некоторые результаты, к счастью начали появляться.

Вот здесь https://skydrive.live.com/?cid=4951010e839e4f2d#cid=4951010E839E4F2D&id=4951010E839E4F2D%21113 первые версии двух пособий по курсу “Компиляторы …”:

  • Папка AntlrTutorial. Базовые моменты по работе с генратором компиляторов ANTLR
  • Папка CILTutorial. Опять-таки минимальный набор сведений с примерами для изучающих IL (в объеме, достаточном, для создания примитивного компилятора).

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

Основное что сейчас есть во Введении в ANTLR:

  • Общее описание ANTLR
  • Подготовка к работе (где взять, как собрать, если собирать, …)
  • Базовые сведения о работе в среде ANTLRWorks
  • Основы грамматики ANTLR
  • Использование семантических атрибутов и действий.

Собственно, чтобы сделать классический (т.е. такой, как описывается во многих классических учебниках) компилятор этого достаточно.

Из того, что запланировано, но еще не сделано (хотя в материалах во многом готово – но надо причесать и написать тексты):

  • Понятие AST и генрация AST в ANTLR
  • Обход AST в стиле паттерна Visitor
  • Tree grmmars в ANTLR
  • Строковые шаблоны

Что касается Введения в IL, то там все еще проще (или печальнее :)):

  • Сделано:
    • Введение в IL. Первая программа (“Hello, world”, понятное дело)
    • Арифметические операции и работа со стеком
    • Локальные переменные (то как это реализовано в ilasm)
    • Логические операции и переходы (метки). Ветвления и циклы
  • Только запланировано:
    • Классы и структуры. Поля классов
    • Методы классов
    • Обработка исключений

Увы, оба документа выложены только как pdf. Основная проблема чтобы опубликовать это еще как-то (в виде того же HTML) – нехватка времени на конвертацию (автоматически из Word это получается не очень презентабельно) + не знаю куда удобнее выложить. Надеюсь, как только доведу до ума, выложу все.

Ну и самое главное…

Большая просьба к тем, кому на глаза попадется эта запись, и заинтересует на столько, что они будут готовы прочитать то безобразие, что я сочинил – отпишите, пожалуйста, ваши впечатления/замечания. Больше всего хочется понять:

  • На сколько это понимаемо для человека, который ни разу в жизни не сталкивался с задачами компиляции + не очень хорошо владеет .Net/C#/VS (собственно из-за этого пришлось включить подробный алгоритм как все подключить в VS)
  • Что не понятно, упущено, плохо описано. Чего избыток.

Ну и вообще – можно ли взяв это пособие в руки сделать простейший компилятор (как в нем и описывается).

This entry was posted in Учеба and tagged , . Bookmark the permalink.

7 Responses to Первые версии “Введения в ANTLR” и “Введения в CIL”

  1. Ринат Биков says:

    “В результате, например, в моем курсе практическая часть состоит в разработке компилятора с простого императивного языка на IL.”
    В данном случае лучше использовать термин не “компилятор”, а “транслятор”.

  2. Игорь says:

    Для генерации кода на нужном в необходимый язык в ANTLR можно использовть в объявлении грамматики опцию:
    grammar _Grammar’s Name_;

    options
    {
    language = _Language’s Name_;
    }

    • Вообще-то это есть в пособии, пусть и не так явно…

      Я не ставил целью рассказать абсолютно все об Antlr (для этого есть отличная книга от Теренса Пратта), у меня задача была на поряок проще – обеспечить моим студентам быстрый старт. Судя по результатам – это удалось.

      Но все равно спасибо за отзыв. Вы работали с пособием? Можете поделиться впечатлениями?

  3. Александр says:

    Здравствуйте,
    Вот что я нашел
    // Выражение с умножением – это последовательность атомарных единиц, разделенных pyfrfvb
    там должен быть написано “знаками”?
    И последнее что я хотел сказать это насчет CSharp3. Эта штука не любит HIDDEN поэтому при компиляции возникает ошибка. Нашел вот такое решение http://aaronsideeffects.blogspot.ru/2012/01/antlr-getting-started.html

    • >> Вот что я нашел
      Спасибо! Постараюсь не забыть и поправить.

      >> Эта штука не любит HIDDEN поэтому при компиляции возникает ошибка
      Вроде я даже хотел на этом заострить внимание, но забыл…
      Кстати, я сам просто тупо менял HIDDEN на Hidden. Приведенное вами решение изящнее. Спасибо еще раз.

      Ну а в целом как впечатление от материала? Стоит ли его дорабатывать и если да, то как (я вот так и не соберусь сделать главу по грамматикам деревьев и текстовым шаблонам (иногда их достаточно чтобы вообще не писать код обработки.

  4. Софья says:

    Из всего, что я читала по ANTLR, главным образом, на русском, ваше – лучшее. Еще раз большое спасибо. Пособие мы заканчиваем.
    Софья

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s