Приложения методов трансляции
В курсе "Формальные языки и методы трансляции" были изучены основные теоретические понятия, идеи, методы, модели, алгоритмы, применяемыме при разработке трансляторов. В данном курсе рассматриваются применение теоретических сведений на практике. В частности рассматривается следующее:
- контекстно-свободные грамматики;
- регулярные выражения;
- конечные автоматы;
- системы lex и yacc;
- обработка ошибок трансляции;
- управление типами данных, операциями, памятью.
Пример проекта (lex).
Пример проекта (lex, yacc).
Список задач
-
Используя систему Lex, cкопировать входной текст в стандартный поток, удалив все цифровые символы.
Срок: 26.02.2017 - Разработать транслятор (lex, yacc), который преобразует формат вывода команды cal в столбцовый вариант.
Срок: 12.03.2017
Пример входного потока:February 2017 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Выходной поток:February 2017 Mo 6 13 20 27 Tu 7 14 21 28 We 1 8 15 22 Th 2 9 16 23 Fr 3 10 17 24 Sa 4 11 18 25 Su 5 12 19 26
- Разработать транслятор (lex, yacc), который преобразует HTML таблицу в таблицу на языке LaTex. Поддерживать теги
table, td, tr, th и атрибуты colspan, rowspan. Добавить обработку ошибок: неподдерживаемый HTML тег, неправильная
вложенность HTML тегов, незакрытый HTML тег. Полученный tex файл должен компилироваться с помощью утилиты pdflatex.
Список возможных тестов доступен по ссылке.
Срок: 02.04.2017 -
Добавить в задачу с разбором таблиц поддержку CSS:
- Добавить поддержку тега span.
- Добавить поддержку атрибутов id, name, class, style.
- CSS может быть определен либо в тегах , либо определен (переопределен) в атрибуте style.
- Для CSS поддерживать свойства: color, background-color, border, border-collapse, height, width, vertical-align, text-align.
- Для CSS поддерживать селекторы: класса, идентификатора, дочерних элементов, ">", атрибутов.
Срок: 16.04.2017 -
Имеется абстрактный лаконичный язык запросов (АЛЯЗ), который умеет сокращать текст
запроса за счет использования заранее собранной информации. Язык умеет
обрабатывать операции: выборки, проекции, фильтрации, объединения,
присоединения, сортировки, ограничений. Пример файла с информацией можно найти
по ссылкам: 1,
2.
Ключ :names - список сущностей доступный для выборки, ключ полное имя сущности - отображение путей с другими сущностями.
Необходимо разработать транслятор,
преобразующий запросы на языке АЛЯЗ в запросы на языке SQL.
Срок: 07.05.2017Примеры запросов:
- АЛЯЗ: building SQL: select * from building
- АЛЯЗ: building[name, description] SQL: select name, description from building
- АЛЯЗ: building#(name='test') SQL: select * from building where name='test'
- АЛЯЗ: building#(name=('test'||'foo') && desc='test') SQL: select * from building where name='test' or name = 'foo' and desc='test';
- АЛЯЗ: building#(name='test' && description="test description") SQL: select * from building where name='test' and description='test description'
- АЛЯЗ: floor#(number(>2 && <5 || >10)) SQL: select * from floor where (number > 2 and number < 5) or number > 10
- АЛЯЗ: building (room) SQL: select * from building as b join floor as f on b.id = f.building_id join room as r on f.id = r.floor_id
- АЛЯЗ: building#(name='test') (room#(number=215)) SQL: select * from building as b join floor as f on b.id = f.building_id join room as r on f.id = r.floor_id where b.name='test' and r.number='215';
- Индивидуальный проект транслятора. Срок: 21.05.2017