Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемБогдан Разумовский
1 Октябрь Макрообработка (2 часа)
2 Октябрь Основные вопросы Основные понятия. Классификация макропроцессоров. Основные понятия. Классификация макропроцессоров. Текстовые макропроцессоры. Текстовые макропроцессоры. Синтаксические макропроцессоры. Синтаксические макропроцессоры. Макробработка в С++ Макробработка в С++
3 Октябрь Основные понятия (1) Макрообработка - это обработка самой программы до ее выполнения. Макрообработка - это обработка самой программы до ее выполнения. Макрообработка используется в основном для разработки проблемно- ориентированных языков, повышения удобочитаемости программ и их компоновки с целью выполнения в различных режимах (тестирующем, отладочном, рабочем). Макрообработка используется в основном для разработки проблемно- ориентированных языков, повышения удобочитаемости программ и их компоновки с целью выполнения в различных режимах (тестирующем, отладочном, рабочем).
4 Октябрь Основные понятия (2) Макропроцессор – часть транслятора или отдельная программа, производящая макро обработку. Макропроцессор – часть транслятора или отдельная программа, производящая макро обработку. На входе совокупность синтаксических конструкций языка программирования и макросредств, на выходе – программа, готовая к трансляции. На входе совокупность синтаксических конструкций языка программирования и макросредств, на выходе – программа, готовая к трансляции.
5 Октябрь Основные понятия (3) Лексема - минимальная единица текста, которую обрабатывает макропроцессор. Лексема - минимальная единица текста, которую обрабатывает макропроцессор. Лексемами являются последовательности букв и цифр, не разделенных специальными знаками, и сами специальные знаки (скобки, знаки операций и т.д.). Лексемами являются последовательности букв и цифр, не разделенных специальными знаками, и сами специальные знаки (скобки, знаки операций и т.д.).
6 Октябрь Основные понятия (4) Макропроцессор считывает лексему из входного текста а на выход помещает соответствующую ей последовательность лексем. Макропроцессор считывает лексему из входного текста а на выход помещает соответствующую ей последовательность лексем. Если производится нетривиальная замена одной лексемы на другую, то введенная лексема (или последовательность лексем) называется макрокомандой или макросом. Если производится нетривиальная замена одной лексемы на другую, то введенная лексема (или последовательность лексем) называется макрокомандой или макросом.
7 Октябрь Основные понятия (5) Макроопределения – средства описания макросов. Макроопределения – средства описания макросов. Макровызовы – средства для выполнения макросов. Макровызовы – средства для выполнения макросов. Макросредства включают в себя макроопределения, макровызовы, предопределенные макросы, средства для вычислений в процессе макро обработки. Макросредства включают в себя макроопределения, макровызовы, предопределенные макросы, средства для вычислений в процессе макро обработки.
8 Октябрь Классификация макропроцессоров (1) По области применения – специализированные и общего назначения. По области применения – специализированные и общего назначения. Специализированные макропроцессоры, имея возможность использовать знания о синтаксисе языка программирования, могут предоставить более удобный и широкий набор средств. Специализированные макропроцессоры, имея возможность использовать знания о синтаксисе языка программирования, могут предоставить более удобный и широкий набор средств. Макропроцессоры общего назначения имеет смысл применять в многоязыковых программных системах, когда важны единообразие используемых средств и легкость обучения. Макропроцессоры общего назначения имеет смысл применять в многоязыковых программных системах, когда важны единообразие используемых средств и легкость обучения. По степени близости макросредств к языкам программирования – языкоподобные и независимые. По степени близости макросредств к языкам программирования – языкоподобные и независимые. Языкоподобные макропроцессоры хороши тем, что знание исходного языка программирования помогает в изучении макросредств. Языкоподобные макропроцессоры хороши тем, что знание исходного языка программирования помогает в изучении макросредств. Однако похожий синтаксис имеет и недостатки: в тексте программы трудно отличить макросредства от обычных операторов; одинаковое написание может привести к неправильному пониманию семантики макросредств. Однако похожий синтаксис имеет и недостатки: в тексте программы трудно отличить макросредства от обычных операторов; одинаковое написание может привести к неправильному пониманию семантики макросредств.
9 Октябрь Классификация макропроцессоров (2) По фазе трансляции, на которой производится макро обработка – текстовые, синтаксические и вычислительные. По фазе трансляции, на которой производится макро обработка – текстовые, синтаксические и вычислительные. Текстовые – обработка исходного текста программы до трансляции Текстовые – обработка исходного текста программы до трансляции Синтаксические – обработка исходного текста на этапе синтаксического анализа Синтаксические – обработка исходного текста на этапе синтаксического анализа Вычислительные – обработка исходного текста на этапе генерации кода, используются главным образом для вставки в генерируемый код последовательностей команд, для выполнения не обеспечиваемых языком действий. Вычислительные – обработка исходного текста на этапе генерации кода, используются главным образом для вставки в генерируемый код последовательностей команд, для выполнения не обеспечиваемых языком действий.
10 Октябрь Текстовые макропроцессоры Текстовые макропроцессоры используются в основном для сокращения записи программы, частичного изменения синтаксиса и для изменения текста программы в зависимости от значений параметров. Текстовые макропроцессоры используются в основном для сокращения записи программы, частичного изменения синтаксиса и для изменения текста программы в зависимости от значений параметров.
11 Октябрь Виды макроопределений (1) Подстановка нескольких лексем вместо одной. Подстановка нескольких лексем вместо одной. macro L is PL end macro; Параметрическая подстановка Параметрическая подстановка macro L(Pl,P2,...,Pn) is PL end macro;
12 Октябрь Виды макроопределений (2) Определение значения лексемы (macroeval) Определение значения лексемы (macroeval) macroeval L is Е end macroeval; Условный макро оператор (macroif) Условный макро оператор (macroif) macroif В macrothen PL1macroelsePL2 end macroif;
13 Октябрь Виды макроопределений (3) Макрооператор цикла (macrowhile). Макрооператор цикла (macrowhile). macrowhile В macrodo PL end macrodo;
14 Октябрь Дополнительные средства Ввод текста из дополнительных источников Ввод текста из дополнительных источников Промежуточное хранение отдельных частей текста Промежуточное хранение отдельных частей текста Выдача диагностических сообщений о ходе макро обработки Выдача диагностических сообщений о ходе макро обработки Управление печатью листинга программы Управление печатью листинга программы
15 Октябрь Недостатки текстовых макропроцессоров Листинг программ, получаемый транслятором, отличается от исходной программы, что может привести к путанице результатов. Листинг программ, получаемый транслятором, отличается от исходной программы, что может привести к путанице результатов. Могут возникнуть трудности с обнаружением ошибок, возникающих вследствие неправильного определения макросов. Могут возникнуть трудности с обнаружением ошибок, возникающих вследствие неправильного определения макросов. В тех случаях, когда неправильно описан макрос или в макровызове употреблены неправильные параметры, средства диагностики транслятора неизбежно будут ссылаться на генерируемый текст, и может оказаться затруднительным соотнести эти диагностические сообщения с ошибочным макросом, который является причиной их появления. В тех случаях, когда неправильно описан макрос или в макровызове употреблены неправильные параметры, средства диагностики транслятора неизбежно будут ссылаться на генерируемый текст, и может оказаться затруднительным соотнести эти диагностические сообщения с ошибочным макросом, который является причиной их появления. Невозможно проверить законность аргументов макровызовов. Невозможно проверить законность аргументов макровызовов. Например, может быть оговорено, что аргумент должен быть целой константой, однако чрезвычайно трудно проконтролировать соблюдение этого требования во время макро обработки, так как все аргументы трактуются как последовательности лексем. Например, может быть оговорено, что аргумент должен быть целой константой, однако чрезвычайно трудно проконтролировать соблюдение этого требования во время макро обработки, так как все аргументы трактуются как последовательности лексем.
16 Октябрь Синтаксические макропроцессоры Синтаксические макропроцессоры (объединены в одном процессе макро обработка и синтаксический анализ) дают возможность программисту определять новые синтаксические конструкции через более простые синтаксические структуры базового языка программирования. Синтаксические макропроцессоры (объединены в одном процессе макро обработка и синтаксический анализ) дают возможность программисту определять новые синтаксические конструкции через более простые синтаксические структуры базового языка программирования.
17 Октябрь Преимущества синтаксических макропроцессоров Нет промежуточной генерации текста поэтому меньше возможности для путаницы. Нет промежуточной генерации текста поэтому меньше возможности для путаницы. Можно задавать синтаксическую структуру макровызовов и синтаксические классы параметров; следовательно, на этапе синтаксического анализа можно обнаружить неправильные макровызовы и даже выявить некоторые семантические ошибки. Можно задавать синтаксическую структуру макровызовов и синтаксические классы параметров; следовательно, на этапе синтаксического анализа можно обнаружить неправильные макровызовы и даже выявить некоторые семантические ошибки.
18 Октябрь Пример макроса для синтаксического макропроцессора macro while do end do; end do;is метка: if %1 then %2 goto метка; end if; end macro;
19 Октябрь Макрообработка в С++ Исторически сложилось, что макропроцессор в С++ называется «препроцессором». Исторически сложилось, что макропроцессор в С++ называется «препроцессором». По классификации препроцессор относится к специализированным, независимым, текстовым макропроцессорам По классификации препроцессор относится к специализированным, независимым, текстовым макропроцессорам Инструкции препроцессора называются директивами. Инструкции препроцессора называются директивами. Директивы должны начинаться с символа #, перед которым в строке могут находиться только пробельные символы. Директивы должны начинаться с символа #, перед которым в строке могут находиться только пробельные символы.
20 Октябрь Этапы создания исполняемой программы
21 Октябрь Директива #include Директива #include вставляет содержимое указанного файла в ту точку исходного файла, где она записана. Директива #include вставляет содержимое указанного файла в ту точку исходного файла, где она записана. Включаемый файл также может содержать директивы #include. Включаемый файл также может содержать директивы #include. Поиск файла, если не указан полный путь, ведется в стандартных каталогах включаемых файлов. Вместо угловых скобок могут использоваться кавычки (" ") в этом случае поиск файла ведется в каталоге, содержащем исходный файл, а затем уже в стандартных каталогах. Поиск файла, если не указан полный путь, ведется в стандартных каталогах включаемых файлов. Вместо угловых скобок могут использоваться кавычки (" ") в этом случае поиск файла ведется в каталоге, содержащем исходный файл, а затем уже в стандартных каталогах. Директива #include является простейшим средством обеспечения согласованности объявлений в различных файлах, она включает в них информацию об интерфейсе из заголовочных файлов. Директива #include является простейшим средством обеспечения согласованности объявлений в различных файлах, она включает в них информацию об интерфейсе из заголовочных файлов.
22 Октябрь Директива #define Директива #define определяет подстановку в тексте программы. Она используется для определения: Директива #define определяет подстановку в тексте программы. Она используется для определения: символических констант: #define имя текст_подстановки символических констант: #define имя текст_подстановки макросов, которые выглядят как функции, но реализуются подстановкой их текста в текст программы: макросов, которые выглядят как функции, но реализуются подстановкой их текста в текст программы: #define имя(параметры) текст_подстановки символов, управляющих условной компиляцией. Они используются вместе с директивами #ifdef и #ifndef. Формат: #define имя : символов, управляющих условной компиляцией. Они используются вместе с директивами #ifdef и #ifndef. Формат: #define имя : Примеры: Примеры: #defineVERSION 1 #defineVASIA "Василий Иванович" #defineMAX(x,y) ((x)>(y)?(x):(y)) #defineMUX Имена рекомендуется записывать прописными буквами, чтобы зрительно отличать их от имен переменных и функций. Имена рекомендуется записывать прописными буквами, чтобы зрительно отличать их от имен переменных и функций. Параметры макроса используются при макроподстановке, например, если в тексте программы используется вызов макроса у = MAX(sum1, sum2), он будет заменен на Параметры макроса используются при макроподстановке, например, если в тексте программы используется вызов макроса у = MAX(sum1, sum2), он будет заменен на у = ((sum1)>(sum2)?(sum1):(sum2)); (y)?(x):(y)) #defineMUX Имена рекомендуется записывать прописными буквами, чтобы зрительно отличать их от имен переменных и функций. Имена рекомендуется записывать прописными буквами, чтобы зрительно отличать их от имен переменных и функций. Параметры макроса используются при макроподстановке, например, если в тексте программы используется вызов макроса у = MAX(sum1, sum2), он будет заменен на Параметры макроса используются при макроподстановке, например, если в тексте программы используется вызов макроса у = MAX(sum1, sum2), он будет заменен на у = ((sum1)>(sum2)?(sum1):(sum2));">
23 Октябрь Директивы условной компиляции Директивы условной компиляции #if, #ifdef и #ifndef применяются для того, чтобы исключить компиляцию отдельных частей программы. Директивы условной компиляции #if, #ifdef и #ifndef применяются для того, чтобы исключить компиляцию отдельных частей программы. Это бывает полезно при отладке или, например, при поддержке нескольких версий программы для различных платформ. Это бывает полезно при отладке или, например, при поддержке нескольких версий программы для различных платформ. Формат директивы #if: Формат директивы #if: #if константное_выражение … [#elif константное_выражение …] …][#else…]#endif
24 Октябрь Пример условной компиляции #if VERSION ==1 #define INCFILE "vers1.h" #elif VERSION == 2 #define INCFILE "vers2.h" /* и так далее */ #else #define INCFILE "versN.h #endif #include INCFILE
25 Октябрь Директивы #ifdef и #ifndef Часто в программах используются директивы #ifdef и #ifndef, позволяющие управлять компиляцией в зависимости от того, определен ли с помощью директивы #define указанный в них символ (хотя бы как пустая строка, например, #define 32_BIT_SUPP0RT): Часто в программах используются директивы #ifdef и #ifndef, позволяющие управлять компиляцией в зависимости от того, определен ли с помощью директивы #define указанный в них символ (хотя бы как пустая строка, например, #define 32_BIT_SUPP0RT): #ifdef символ // Расположенный ниже код компилируется, если символ // определен #ifndef символ // Расположенный ниже код компилируется, если символ не // определен Действие этих директив распространяется до первого #elif, #else или #endif. Действие этих директив распространяется до первого #elif, #else или #endif.
26 Октябрь Директива #undef Директива #undef имя удаляет определение символа. Директива #undef имя удаляет определение символа. Используется редко, например, для отключения какой-либо опции компилятора. Используется редко, например, для отключения какой-либо опции компилятора.
27 Октябрь Предопределенные макросы В C++ определено несколько макросов, предназначенных в основном для того, чтобы выдавать информацию о версии программы или месте возникновения ошибки. В C++ определено несколько макросов, предназначенных в основном для того, чтобы выдавать информацию о версии программы или месте возникновения ошибки. __cplusplus определен, если программа компилируется как файл C++. __cplusplus определен, если программа компилируется как файл C++. __DATE__ содержит строку с текущей датой в формате месяц день год, например: __DATE__ содержит строку с текущей датой в формате месяц день год, например: printf(" Дата компиляции - %s \n",__DATE__); __FILE__ содержит строку с полным именем текущего файла. __FILE__ содержит строку с полным именем текущего файла. __LINE__ номер текущей строки исходного текста. __LINE__ номер текущей строки исходного текста. __TIME__ текущее время, например: __TIME__ текущее время, например: printf(" Ошибка в файле %s \n Время компиляции: %s\n ", __FILE__,__TIME__);
28 Октябрь Вопросы к экзамену Макрообработка. Основные понятия. Классификация макропроцессоров. Макрообработка. Основные понятия. Классификация макропроцессоров. Макрообработка. Текстовые макропроцессоры. Область применения. Достоинства и недостатки. Примеры. Макрообработка. Текстовые макропроцессоры. Область применения. Достоинства и недостатки. Примеры. Макрообработка. Синтаксические макропроцессоры. Преимущества перед текстовыми макропроцессорами. Примеры. Макрообработка. Синтаксические макропроцессоры. Преимущества перед текстовыми макропроцессорами. Примеры. Язык С++. Средства макро обработки. Язык С++. Средства макро обработки.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.