МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Структура и реализация макроязыков

    Структура и реализация макроязыков

    Московский Государственный Институт Электроники и Математики

    кафедра САПР

    Реферат

    Тема III

    Разработка общего программного обеспечения

    Задание 3.2

    Вы разрабатываете макроязык для системы. Обоснуйте эффективность

    использования макросредств. Какие типы макросредств допускаются вашим

    макроязыком? Сформулируйте методы построения программы, обрабатывающей

    макроязык

    Преподаватель:

    Зайцева Л. В.

    Студент:

    Омельченко С. А.

    МАКРОЯЗЫК И МАКРОПРОЦЕССОР

    Оператор, работающий в какой-либо системе, часто встречается с

    необходимостью повторять некоторые последовательности действий много раз?

    Такая последовательность может, например, состоять из ввода некоторой

    текстовой последовательности, нажатии определенной последовательности

    клавиш, выполнении однотипного ряда каких-либо арифметических операций. В

    подобных случаях часто можно воспользоваться аппаратом макрокоманд.

    Макрокоманды (часто называемые макро или макрос) являются однострочными

    сокращениями для группы команд. Используя макрокоманду, программист по

    существу определяет одну “команду” для представления некоторой

    последовательности команд.

    Определяя соответствующие макрокоманды, оператор может удобным для себя

    образом вводить свои собственные средства более высокого уровня, не

    заботясь о структуре системы. Он может достигнуть краткости и простоты

    управления системой, не теряя при этом основных преимуществ использования

    исходной системы, такой, как например язык ассемблера. Крупные

    макрооперации упрощают пользование, отладку и модификацию программ, и

    облегчают стандартизацию. Многие разработчик вычислительных машин

    используют макрокоманды для автоматизации составления “подходящих”

    операционных систем в процессе, называемом генерацией системы

    МАКРОКОМАНДЫ

    В своей простейшей форме макрокоманда представляет собой сокращение для

    обозначения последовательности операций

    Рассмотрим следующий набор команд, взятый из макроязыка IDE для Borland C++

    версии 3.1 (TEMC). Рассмотрим следующую программу, написанную с помощью

    этих операций

    Пример 1

    .

    .

    .

    SetPrevPos;

    FixScreenPos;

    PageScreenUp;

    FixCursorPos;

    .

    .

    .

    SetPrevPos;

    FixScreenPos;

    PageScreenUp;

    FixCursorPos;

    .

    .

    .

    В приведенной программе последовательность команд

    SetPrevPos;

    FixScreenPos;

    PageScreenUp;

    FixCursorPos;

    встречается дважды.

    Аппарат макрокоманд позволяет присвоить этой последовательности имя и

    использовать это имя вместо нее. Можно также определить некоторый

    макроязык, позволяющий рассматривать данную конструкцию, как определение и

    в дальнейшем использовать это определение.

    Фактически, макропроцессор представляет собой отдельный языковой процессор

    со своим собственным языком.

    Форматы макроопределений в различных системах может отличаться друг от

    друга. В данном случае последовательность команд, определяющая макрокоманду

    имеет следующий формат

    MACRO

    -----------------

    -----------------

    -----------------

    END;

    Псевдокоманда MACRO - первая строка определения - определяет следующий за

    ней идентификатор, как имя макрокоманды. Вслед за этой строкой

    располагается последовательность команд, называемых “телом

    макроопределения”. Определение заканчивается строкой с псевдокомандой END.

    Если макрокоманда определена, то использование имени соответствующей

    макрокоманды в качестве мнемоники кода в программе эквивалентно

    использованию соответствующей последовательности команд. Если повторяющейся

    последовательности команд дать имя “MacPageUp”, то наш пример можно будет

    переписать следующим образом:

    |Исходный текст |Расширение исходного текста |

    | |. |

    |MACRO MacPageUp |. |

    |SetPrevPos; |. |

    |FixScreenPos; |SetPrevPos; |

    |PageScreenUp; |FixScreenPos; |

    |FixCursorPos; |PageScreenUp; |

    |END; |FixCursorPos; |

    |. |. |

    |. |. |

    |. |. |

    |MacPageUp |SetPrevPos; |

    |. |FixScreenPos; |

    |. |PageScreenUp; |

    |. |FixCursorPos; |

    |MacPageUp |. |

    |. |. |

    |. |. |

    |. | |

    В данном случае макропроцессор заменяет каждую макрокоманду (макровызов)

    строками:

    SetPrevPos;

    FixScreenPos;

    PageScreenUp;

    FixCursorPos;

    Такой процесс замены называется расширением макрокоманды. Заметим, что само

    макроопределение не появляется в расширении исходного текста. Определение

    сохраняется макропроцессором. Вхождение в исходную программу имени

    макрокоманды как мнемоники операции называется макровызовом.

    ОПЕРАТОРЫ МАКРОКОМАНД

    Аппарат макрокоманд в том виде, как он был описан до сих пор, позволяет

    подставлять последовательности команд вместо макровызовов, причем все

    обращения к макроопределению будут заменены идентичными

    последовательностями команд. Такой аппарат недостаточно гибок: в

    макровызове нет средств модифицировать коды, которые его заменяют.

    Существенное расширение возможностей макросредств достигается добавлением

    операндов (параметров) макрокоманд.

    Рассмотрим следующую программу:

    Пример 2:

    .

    .

    .

    SetPrevPos;

    MoveToMark(1);

    CenterFixScreenPos;

    .

    .

    .

    SetPrevPos;

    MoveToMark(2);

    CenterFixScreenPos;

    .

    .

    .

    В данном случае последовательности команд очень похожи, но не абсолютно

    идентичны. В первой последовательности используется операнд “1”, а во

    втором - операнд “2”. Можно считать, что они выполняют одну и ту же

    операцию с переменным параметром, или операндом. Такой параметр называют

    “операндом макрокоманды” или “формальным параметром”, и он обычно

    объявляется в той же строке, где и имя макроса. В случае работы с языком

    макроассемблера, он обычно помечается символом &, что отличает его как

    символ макроязыка от символов ассемблера. В нашем случае, фирма Борланд не

    предусмотрела в своем макроязыке работы с макрооперандами, однако можно

    предположить, что если бы макроопределения в языке TEMC могли бы

    обрабатывать подобную ситуацию, то формат макроопределения мог бы выглядеть

    следующим образом:

    MACRO ()

    -----------------

    -----------------

    -----------------

    END;

    где это перечисление через запятую всех операндов макроса.

    Предыдущая программа в таком случае может быть переписана следующим

    образом:

    |Исходный текст |Расширение исходного текста |

    |MACRO MacGoto(labelno) | |

    |SetPrevPos; | |

    |MoveToMark(labelno); | |

    |CenterFixScreenPos; |. |

    |END; |. |

    | |. |

    |. |SetPrevPos; |

    |. |MoveToMark(1); |

    |. |CenterFixScreenPos; |

    |MacGoto(1) |. |

    |. |. |

    |. |. |

    |. |SetPrevPos; |

    |MacGoto(2) |MoveToMark(2); |

    |. |CenterFixScreenPos; |

    |. |. |

    |. |. |

    | |. |

    Следует заметить, что макрокоманда может иметь и более одного операнда.

    Каждый операнд должен при этом соответствовать формальному параметру в

    строке определения имени макроса.

    Рассмотрим следующий пример:

    Пример 3:

    .

    .

    .

    ScrollScreenDown;

    ScrollScreenLeft(0);

    FixCursorPos;

    .

    .

    .

    ScrollScreenUp;

    ScrollScreenLeft(1);

    FixCursorPos;

    .

    .

    .

    В данном случае операнды в исходных последовательностях команд различны,

    как и команды. Эта программа может быть переписана так:

    |Исходный текст |Расширение исходного текста |

    |MACRO MacMove(cmd,left) |. |

    |cmd; |. |

    |ScrollScreenLeft(left); |ScrollScreenDown; |

    |FixCursorPos; |ScrollScreenLeft(0); |

    |END; |FixCursorPos; |

    |. |. |

    |. |. |

    |. |. |

    |MacMove(ScrollScreenDown,0) |ScrollScreenUp; |

    |. |ScrollScreenLeft(1); |

    |. |FixCursorPos; |

    |. |. |

    |MacMove(ScrollScreenUp,1) |. |

    | |. |

    Следует отметить, что существует два основных способа задания операндов.

    Первый способ - позиционный показан в вышестоящем примере. Существует также

    способ указания с применением ключевых операндов, который позволяет

    обращаться к формальным операторам, как по именам так и по позиции.

    Ссылаясь на формальные операторы в определении MacMove можно также

    использовать следующий вызов:

    MacMove(cmd=ScrollScreenUp,left=1)

    УСЛОВНОЕ МАКРОРАСШИРЕНИЕ

    Иногда возникают потребности изменять порядок команд макрорасширения внутри

    макроса.

    Рассмотрим следующую программу:

    Пример 4:

    .

    .

    .

    ScrollScreenLeft(1);

    LiteralChar('-');

    .

    .

    .

    ScrollScreenDown;

    ScrollScreenLeft(2);

    LiteralChar('*');

    .

    .

    .

    В этом примере не только параметры, но и количество команд - переменная

    величина. Эта программа может быть записана следующим образом:

    .

    .

    .

    MACRO Mac1(p1,left,chr)

    IF p1==1 THEN

    ScrollScreenDown;

    ENDIF

    ScrollScreenLeft(2);

    LiteralChar('*');

    END

    | |. |

    |. |. |

    |. |. |

    |. |ScrollScreenLeft(1); |

    |Mac1(1,2,’-’) |LiteralChar('-'); |

    |. |. |

    |. |. |

    |. |. |

    |Mac1(0,1,’*’) |ScrollScreenDown; |

    |. |ScrollScreenLeft(2); |

    |. |LiteralChar('*'); |

    |. |. |

    | |. |

    | |. |

    Комбинация IF...THEN...ELSE является макрометками или символами следования

    и не появляются в выходном тексте макропроцессора. В макроязыке также могут

    быть предусмотрены псевдокоманды условного и безусловного перехода на

    псевдо-метку, с которой макропроцессор продолжит обработку текста

    программы. Точно так же, как и в случае выполнения программы, операторы

    переходов служат для указания выполнения операторов программы, операторы

    макро-переходов служат для указания порядка компиляции текста программы.

    Это дает возможность в процессе расширения получать конкретные варианты

    последовательностей команд, соответствующие данному случаю применения

    макрокоманды. Выполнение переходов и проверок внутри выполняемого кода

    увеличивает его размер и время выполнения, в то время, как проверка и

    переходы в макросах происходят на стадии компиляции и поэтому не требуют

    затрат времени при выполнении кода. Эта возможность избирательной выборки

    нужных частей текста является одним из самых мощных средств в системном

    программировании.

    МАКРОВЫЗОВЫ ВНУТРИ МАКРООПРЕДЕЛЕНИЯ

    Поскольку макроопределения являются, по сути, “сокращениями” для

    последовательности команд, то полезным свойством была бы возможность

    производить такие “сокращения” внутри самих макроопределений.

    Пример 5:

    .

    .

    .

    MACRO Mac1

    SetPrevPos;

    CursorCharRight;

    END

    .

    .

    .

    MACRO Mac2

    Mac1

    Mac1

    END

    .

    .

    .

    Внутри макроопределения Mac2 дважды происходит ссылка на макроопределение

    Mac1. Это помогло нам уменьшить длину макроопределения Mac2 и сделало его

    более легким для понимания. Такое использование макросредств приводит к

    макрорасширениям на нескольких уровнях вложенности, например:

    |Исходный текст |Расширение исходного |Расширение исходного |

    | |текста (уровень 1) |текста (уровень 2) |

    |. | | |

    |. | | |

    |. | | |

    |MACRO Mac1 | | |

    |SetPrevPos; | | |

    |CursorCharRight; | | |

    |END | | |

    | | | |

    |MACRO Mac2 |MACRO Mac2 | |

    |Mac1 |SetPrevPos; | |

    |Mac1 |CursorCharRight; | |

    |END |SetPrevPos; | |

    |. |CursorCharRight; | |

    |. |END | |

    |. | |SetPrevPos; |

    | | |CursorCharRight; |

    |Mac2 |Mac2 |SetPrevPos; |

    | | |CursorCharRight; |

    |. |. |. |

    |. |. |. |

    |. |. |. |

    Макровызовы, внутри макроопределений могут включать несколько уровней.

    Например, команда Mac2 могла бы быть выполнена внутри другого

    макроопределения. Фактически, такие средства, как макро-переходы дают

    возможность любое число раз обращаться к любому макроопределению, и даже к

    самому себе. Такие вызовы называются рекурсивными.

    МАКРООПРЕДЕЛЕНИЯ В МАКРООПРЕДЕЛЕНИЯХ

    Мы рассматривали макрокоманды, как обобщенные сокращения для

    последовательности команд. Представляется разумным разрешить использование

    в теле макроопределения любых допустимых синтаксисом предложений, в том

    числе и другие макроопределения.

    Необходимо, однако, понимать, что внутреннее макроопределение не будет

    определено до тех пор, пока не произойдет вызов внешнего макроса. Это -

    следствие метода реализации макроопределений. Например, пусть пользователь

    хочет определить группу макроопределений для обращения к подпрограммам с

    помощью какой-то стандартизированной вызывающей последовательности.

    Приведенный ниже пример определяет макрокоманду DEFINE, которая при

    указании в качестве ее операнда имени подпрограммы определяет

    соответствующий этому имени макрос. Отдельные генерируемые макроопределения

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.