Skip to content

xoxoginger/SP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SP

System Programming Labs

Вариант: 208-29

Лабораторная работа N1

Тема: Знакомство с языком МИКРОЛИСП. Отображение программ из МИКРОЛИСПа в С++.

Изучить и выполнить в среде DrRacket программу анализа двоичного представления целого неотрицательного числа n, записанную в файле bit-count.ss .
Построить эквивалентную программу на языке С++, используя правила преобразования, записанные в файле TranslationRules20.rtf . В заголовочном файле mlisp.h определены функции remainder, quotient, display и newline, эквивалентные одноименным процедурам ЛИСП. Откомпилировать и выполнить программу в системе С++.

Лабораторная работа N2

Тема: Знакомство с языком МИКРОЛИСП. Отображение программ из МИКРОЛИСПа в С++.

Если f – непрерывная унимодальная функция на интервале [a,b], то значение xmin, доставляющее минимум f(x), можно найти методом «золотого сечения» (golden section search) (Википедия: «Метод золотого сечения»).

Доработать учебный тренажер golden-section20.ss, заменив определение процедуры fun, и найти минимум функции на заданном интервале. Составить и протестировать эквивалентную программу на С++. Варианты задания записаны в var20-06.rtf, var20-08.rtf, ожидаемые ответы - в res20-06.rtf, res20-08.rtf.

Лабораторная работа N3

Тема: Знакомство с языком МИКРОЛИСП. Отображение программ из МИКРОЛИСПа в С++.

А) Изучить тренажер coin20.cpp , в котором на языке С++ записана программа размена денег. Предполагается, что набор номиналов упорядочен по возрастанию. В) Изменить программу в соответствии с вариантом задания (файл var-coins.rtf). C) Декомпилировать программу в язык МИКРОЛИСП. D) Сравнить результаты выполнения программ на МИКРОЛИСПе и С++.

Методические указания. Условные выражения С++ переписать на МИКРОЛИСПе, используя особую форму cond с заключительной ветвью else.

Лабораторная работа N4

Тема: Конечные автоматы.

Используя тренажер testadec.cpp, постройте детерминированный конечный автомат, распознающий вещественные литералы языка МИКРОЛИСП – токен $dec.

Правила записи чисел задаются базовой формулой: < +|- ><целая часть>.<дробная часть><e|E>< +|- > <порядок> Примеры: +1.5е-6 , -2.0Е+4

Базовая формула дополняется прaвилами, упрощающими запись чисел. Варианты шаблона токена $dec содержатся в файле vardec.rtf . Для тестирования используйте все константы, записанные в файле dec.ss .

Лабораторная работа N5

Тема: Лексический анализ.

Построить диаграмы детерминированных конечных автоматов, распознающих токены языка МИКРОЛИСП: $dec, $id и $idq. Шаблоны токенов описаны в файле LexicalConventions.rtf . Вaрианты задания записаны в файлах varlex206.rtf , varlex208.rtf . Для токенов $id и $idq указаны запрещенные комбинации символов.

Собрать лексический анализатор из корневого файла testlex.cpp и протестировать его на файлах dec.ss,id.ss, idq.ss.

Лабораторная работа N6

Тема: Синтаксический анализ.

  1. Изучить «Краткое введение в теорию грамматик» - файл AboutGrammas.rtf .
  2. Изучить грамматику языка МИКРОЛИСП – файл Mlisp20Gramma.rtf .
  3. Построить дерево разбора заданного предложения. Узлы дерева пометить номерами применяемых продукций.

Лабораторная работа N7

Тема: Синтаксический анализ.

  1. Изучить конспект лекции (файл AboutParsing.rtf)
  2. Изучить учебный тренажер (файл ParsApplication.rtf) .
  3. В папке Lab07 заменить файл lexer.h своим файлом из Лабораторной №5.
  4. Собрать тренажер из корневого файла Pars.cpp .
  5. В тестовой цепочке из Лабораторной №6 заменить символы токенов подходящими для Ваших токенов лексемами.
  6. К полученной цепочке применить анализатор в режиме трассировки.
  7. Сравнить трассу анализа с деревом разбоpа, построенным в Лабораторной №6. Если обнаружатся расхождения, скорректировать дерево разбора.
  8. Применить анализатор к файлам id и idq без трассировки. Анализатор должен «споткнуться» на запрещенной для Вашего варианта, цепочке и выдать сообщение Lexis: unknown token!

Лабораторная работа N8

Тема: Подготовка контрольных задач.

  1. Из папки grammas206 или grammas208 перенесите в папку Lab08 файл с описанием грамматики своего диалекта языка МИКРОЛИСП.
  2. Изучите грамматику в сравнении с грамматикой mlisp20. Убедитесь, что Ваш диалект – это сужение МИКРОЛИСПа. Некоторые грамматические формы в диалекте отсутствуют, а некоторые представлены в усеченном виде.
  3. Перенесите в папку Lab08 свой файл lexer.h из Лабораторной №5.
  4. Соберите тренажер из корневого файла Pars08.cpp . В этой версии тренажера, при записи текста в строке ввода, режим трассировки не включается.
  5. Используя тренажер и файл GrammaFeatures.rtf, уточните особенности Вашего диалекта (см. Методические указания).
  6. Перенесите в папку Lab08 файлы bit-count.ss, golden-section20.ss и coin20.ss из Лабораторных №1-3.
  7. С учетом особенностей своего диалекта, выполните эквивалентные преоразования программ так, чтобы тренажер выдавал сообщения Good source!

Если диалект позволят сохранить грамматическую форму в контрольной задаче, ЗАПРЕЩАЕТСЯ применять к ней эквивалентные преобразования. Веещественную константу можно заменить только литералом своего варианта токена $dec. Обязательно проверьте программы в DrRacket на соответствие результатам Лабораторных 1 – 3.

Лабораторная работа N9

Тема: Синтаксически управляемая трансляция.

  1. Изучить конспект лекции (файл SyntaxDirectedTranslation.rtf)
  2. Изучить учебный тренажер (файл MlispgenApplication.rtf) .
  3. Собрать тренажер из корневого файла Mlispgen.cpp .
  4. Проверить работу тренажера на файлах t1 – t6.
  5. Реализовать в файле code-gen.cpp все продукции транслятора для языка m20, строго соблюдая Правила трансляции (TranslationRules20.rtf).
  6. Откомпилировать и выполнить целевые программы на С++.

Курсовая работа 2020.

Часть 1.

Для заданного в Лабораторной №8 диалекта языка МИКРОЛИСП разработать синтаксически управляемый транслятор в язык С++, применяя методику из Лабораторной №9. Работоспособность транслятора проверить на трех контрольных задачах из Лабораторной №8.

About

System Programming Labs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors