(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Проекты | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация (English)

Приложения методов трансляции

В курсе "Формальные языки и методы трансляции" были изучены основные теоретические понятия, идеи, методы, модели, алгоритмы, применяемыме при разработке трансляторов. В данном курсе рассматриваются применение теоретических сведений на практике. В частности рассматривается следующее:

Пример проекта (lex).
Пример проекта (lex, yacc).

Список задач

  1. Используя систему Lex, cкопировать входной текст в стандартный поток, удалив все цифровые символы.
    Срок: 26.02.2017
  2. Разработать транслятор (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      
    
  3. Разработать транслятор (lex, yacc), который преобразует HTML таблицу в таблицу на языке LaTex. Поддерживать теги table, td, tr, th и атрибуты colspan, rowspan. Добавить обработку ошибок: неподдерживаемый HTML тег, неправильная вложенность HTML тегов, незакрытый HTML тег. Полученный tex файл должен компилироваться с помощью утилиты pdflatex. Список возможных тестов доступен по ссылке.
    Срок: 02.04.2017
  4. Добавить в задачу с разбором таблиц поддержку 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
  5. Имеется абстрактный лаконичный язык запросов (АЛЯЗ), который умеет сокращать текст запроса за счет использования заранее собранной информации. Язык умеет обрабатывать операции: выборки, проекции, фильтрации, объединения, присоединения, сортировки, ограничений. Пример файла с информацией можно найти по ссылкам: 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';
  6. Индивидуальный проект транслятора.
  7. Срок: 21.05.2017