System Programming Labs
Изучить и выполнить в среде DrRacket программу анализа двоичного представления целого неотрицательного числа n, записанную в файле
bit-count.ss .
Построить эквивалентную программу на языке С++, используя правила преобразования, записанные в файле
TranslationRules20.rtf .
В заголовочном файле mlisp.h определены функции remainder, quotient, display и newline, эквивалентные одноименным процедурам ЛИСП.
Откомпилировать и выполнить программу в системе С++.
Если 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.
А) Изучить тренажер coin20.cpp , в котором на языке С++ записана программа размена денег. Предполагается, что набор номиналов упорядочен по возрастанию. В) Изменить программу в соответствии с вариантом задания (файл var-coins.rtf). C) Декомпилировать программу в язык МИКРОЛИСП. D) Сравнить результаты выполнения программ на МИКРОЛИСПе и С++.
Методические указания. Условные выражения С++ переписать на МИКРОЛИСПе, используя особую форму cond с заключительной ветвью else.
Используя тренажер testadec.cpp, постройте детерминированный конечный автомат, распознающий вещественные литералы языка МИКРОЛИСП – токен $dec.
Правила записи чисел задаются базовой формулой: < +|- ><целая часть>.<дробная часть><e|E>< +|- > <порядок> Примеры: +1.5е-6 , -2.0Е+4
Базовая формула дополняется прaвилами, упрощающими запись чисел. Варианты шаблона токена $dec содержатся в файле vardec.rtf . Для тестирования используйте все константы, записанные в файле dec.ss .
Построить диаграмы детерминированных конечных автоматов, распознающих токены языка МИКРОЛИСП: $dec, $id и $idq. Шаблоны токенов описаны в файле LexicalConventions.rtf . Вaрианты задания записаны в файлах varlex206.rtf , varlex208.rtf . Для токенов $id и $idq указаны запрещенные комбинации символов.
Собрать лексический анализатор из корневого файла testlex.cpp и протестировать его на файлах dec.ss,id.ss, idq.ss.
- Изучить «Краткое введение в теорию грамматик» - файл AboutGrammas.rtf .
- Изучить грамматику языка МИКРОЛИСП – файл Mlisp20Gramma.rtf .
- Построить дерево разбора заданного предложения. Узлы дерева пометить номерами применяемых продукций.
- Изучить конспект лекции (файл AboutParsing.rtf)
- Изучить учебный тренажер (файл ParsApplication.rtf) .
- В папке Lab07 заменить файл lexer.h своим файлом из Лабораторной №5.
- Собрать тренажер из корневого файла Pars.cpp .
- В тестовой цепочке из Лабораторной №6 заменить символы токенов подходящими для Ваших токенов лексемами.
- К полученной цепочке применить анализатор в режиме трассировки.
- Сравнить трассу анализа с деревом разбоpа, построенным в Лабораторной №6. Если обнаружатся расхождения, скорректировать дерево разбора.
- Применить анализатор к файлам id и idq без трассировки. Анализатор должен «споткнуться» на запрещенной для Вашего варианта, цепочке и выдать сообщение Lexis: unknown token!
- Из папки grammas206 или grammas208 перенесите в папку Lab08 файл с описанием грамматики своего диалекта языка МИКРОЛИСП.
- Изучите грамматику в сравнении с грамматикой mlisp20. Убедитесь, что Ваш диалект – это сужение МИКРОЛИСПа. Некоторые грамматические формы в диалекте отсутствуют, а некоторые представлены в усеченном виде.
- Перенесите в папку Lab08 свой файл lexer.h из Лабораторной №5.
- Соберите тренажер из корневого файла Pars08.cpp . В этой версии тренажера, при записи текста в строке ввода, режим трассировки не включается.
- Используя тренажер и файл GrammaFeatures.rtf, уточните особенности Вашего диалекта (см. Методические указания).
- Перенесите в папку Lab08 файлы bit-count.ss, golden-section20.ss и coin20.ss из Лабораторных №1-3.
- С учетом особенностей своего диалекта, выполните эквивалентные преоразования программ так, чтобы тренажер выдавал сообщения Good source!
Если диалект позволят сохранить грамматическую форму в контрольной задаче, ЗАПРЕЩАЕТСЯ применять к ней эквивалентные преобразования. Веещественную константу можно заменить только литералом своего варианта токена $dec. Обязательно проверьте программы в DrRacket на соответствие результатам Лабораторных 1 – 3.
- Изучить конспект лекции (файл SyntaxDirectedTranslation.rtf)
- Изучить учебный тренажер (файл MlispgenApplication.rtf) .
- Собрать тренажер из корневого файла Mlispgen.cpp .
- Проверить работу тренажера на файлах t1 – t6.
- Реализовать в файле code-gen.cpp все продукции транслятора для языка m20, строго соблюдая Правила трансляции (TranslationRules20.rtf).
- Откомпилировать и выполнить целевые программы на С++.
Для заданного в Лабораторной №8 диалекта языка МИКРОЛИСП разработать синтаксически управляемый транслятор в язык С++, применяя методику из Лабораторной №9. Работоспособность транслятора проверить на трех контрольных задачах из Лабораторной №8.