Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
Лабораторная работа №2
«Лексика языков программирования. Конечные автоматы без памяти для обнаружения слов в тексте программы.»
Выполнил: Малахов С.А. Преподаватель:
Группа: АМ-710 Малявко А.А.
Факультет: АВТФ
Вариант: 2332321
Новосибирск 2010
1. Цели работы
Изучение конечных автоматов (КА) без памяти, способов определения КА – канонического, графового и табличного, методов построения недетерминированного КА по системе регулярных выражений, методов эквивалентных преобразований недетерминированных КА в оптимальные полностью определенные КА – лексические акцепторы.
2. Задание
· Используя пакет ВебТрансЛаб, освоить:
o создание лексических правил на языке регулярных выражений (РВ);
o использование операций «+, *, ?, конкатенации и выбора» языка РВ;
o преобразование системы РВ в одноавтоматный лексический акцептор;
o добавление правил и действий в систему РВ для построения мультиавтоматного лексического акцептора;
· Разработать (доработать разработанный при выполнении работы №1) фрагмент системы регулярных выражений для всех (или выбранной самостоятельно части) групп слов языка, определенного заданием на курсовую работу. Построить по этому фрагменту:
o программный модуль, управляемый графом состояний и переходов;
o программный модуль, управляемый таблично;
· Изучить структуру программных модулей, построенных ВебТрансЛабом, изучить алгоритмы работы лексического акцептора для графового и табличного способов реализации КА, сравнить реализации конечных автоматов, управляемых различными способами, между собой;
· Изучить реализацию вызова действий, определенных в лексических правилах и алгоритм работы формирователя лексем.
· Проверить функционирование конечных автоматов, построенных ВебТрансЛабом (подготовить тестовый пример, запустить каждый автомат на выполнение, протрассировать работу лексического акцептора в графовой и табличной реализации, убедиться в работоспособности автоматов, в противном случае – доработать систему РВ и добиться правильного функционирования лексического акцептора).
· Изучить те элементы языка шаблонов, которые используются для преобразования внутреннего представления конечного автомата в программную реализацию лексического анализатора.
3. Индивидуальное задание
Идентификаторы и константы
2 |
<Б><Ц><пБЦ> |
целые вещественные символьные булевские |
Объявления примитивных типов (целое, вещественное, символьное, булево):
3 |
int[e[g[e[r]]]] double litera bool |
Объявления объектов и создание/уничтожение экземпляров
3 |
object |
build / destroy |
Оператор присваивания:
2 |
<И> <- <В>; |
Условный оператор:
В-т: |
3 |
? (<ЛВ>) :<ОБ> [: <ОБ>] |
Переключатель
2 |
switch<В> { by <К>:<ОБ> [break] …} |
Оператор цикла:
1 |
while(<ЛВ>) loop <ОБ> |
4.Порядок выполнения работы
В ходе работы были изучены принципы построения лексических правил на языке регулярных выражений (продолжение лабораторной работы №1). Было рассмотрено преобразование системы регулярных выражений в мультиавтоматный лексический акцептор, после чего были разработаны правила для выявления символьных констант, для этого было создано несколько автоматов, а также «привязать» действия к переходам.
После доработки фрагмента системы регулярных выражений были построены программные модули, управляемые:
· графом состояний переходов,
· таблично.
Были изучены: структура генерируемых программных модулей, вызов действий определенных в лексических правилах.
Была проверена правильность функционирования конечных автоматов построенных пакетом ВебТрансЛаб.
При сравнении было установлено, что табличный и графовый методы приблизительно одинаковы по трудоемкости и сложности реализации. С точки зрения человека графовый способ имеет большую наглядность (по графическому изображению графа очень удобно проверять и продумывать поведение автомата), но при переходе к программной реализации эта наглядность теряется. Табличный метод менее нагляден, но позволяет очень просто реализовать алгоритм на языке программирования, почти не прибегая к написанию особых (не библиотечных) классов. Так же при табличном способе, проще оптимизировать управляющую таблицу.
5.Вывод
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.