Главная » Просмотр файлов » А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий

А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (1114947), страница 12

Файл №1114947 А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий) 12 страницаА.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (1114947) страница 122019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 12)

Один из вопросов, которые мы хотим рассмотреть, — это вопрос об области видимости объявлений. Областью видимости (зсоре) объявления х называется область программы, в которой используется х из этого объявления. Язык использует статическую область видимости или лексическую область видимости, если он может определить область видимости объявления при рассмотрении исходной программы. В противном случае язык использует динамическую область видимости. При динамической области видимости в процессе выполнения программы одинаковое использование х может работать с несколькими различными обьявлениями х.

Большинство языков программирования, такие как С и )ача, используют статическую область видимости. Мы рассмотрим ее в подразделе 1.б.3. Пример 1.3. В качестве еше одного примера понятия статического и динамического рассмотрим использование термина "статический" в применении к данным в объявлении класса 3ача. В )ача переменная представляет собой имя для ячейки памяти, использующейся для хранения ее значения. Здесь "статический" означает не область видимости переменной, а способность компилятора определить ячейку памяти, в которой может быть найдена объявленная переменная.

Объявление наподобие рцЫ1с втатзс зп~ хг делает х переменной класса и гласит, что имеется только одна копия х, независимо от общего количества созданных объектов класса. Более того, компилятор может определить ячейку памяти, в которой будет храниться целое значение х. Напротив, если убрать из этого обьявления втагзс, то каждый объект класса будет иметь собственную ячейку памяти, в которой будет храниться значение х, и компилятор не в состоянии заранее определить все эти ячейки в программе, которая будет выполняться.

и 1.6.2 Среды и состояния Еще один важный вопрос, который следует рассмотреть при обсуждении языков программирования, — влияют ли изменения во время выполнения программы 59 1.6. Азы языков программирования на значения элементов данных, или на интерпретацию имен этих данных. Например, выполнение присваиваниях = у + 1 изменяетзначение, обозначаемое как х. Говоря более строго, присваивание изменяет значение в ячейке памяти, обозначенной как х. Может оказаться менее понятным, что сама ячейка, обозначаемая как х, может измениться при выполнении программы. Например, как было в примере 1.3, если х не является статической переменной (переменной класса), то каждый объект класса имеет собственную ячейку памяти для экземпляра переменной х.

В этом случае присваивание переменной х может изменить любой из этих экземпляров переменных в зависимости от того, какому объекту принадлежит метод, содержащий это присваиванне. Связь имен с местоположением в памяти и затем со значениями может быть описана как два отображения, изменяющиеся по ходу выполнения программы (рис. 1.8).

1. Среда (епи1гопптеп1) — это отображение имен на ячейки памяти. Поскольку переменные указывают на местоположения в памяти ("1иа!це" в терминологии С), можно также определить среду как отображение имен на переменные. 2. Состояние (ма1е) представляет собой отображение местоположений в памяти на их значения, т.е. в терминологии С состояние отображает 1ча!це на соответствующие геа!це. Среды изменяются в соответствии с правилами областей видимости языка.

Среда Состояние Имена Ячейки памяти Значения (переменные) Рис. 1.8. Двухсталийное отображение имен на значения Пример 1.4. Рассмотрим фрагмент программы на С (рис. 1.9). Целое 1 объявлено как глобальная переменная, а затем — как локальная переменная функции Г. При выполнении )' среда изменяется так, что имя 1 ссылается на ячейку памяти, зарезервированную для г, локального для функции р, так что явно показанное присваивание 1 = 3 обращается к этому месту в памяти. Обычно такая локальная переменная 1 располагается в стеке времени выполнения. При выполнении функции д, отличной от т", использование! не может означать обращение к локальной переменной г функции т".

Это использование г в функции д должно находиться в области видимости некоторого другого объявления 1. Явно 60 Глава 1. Введение в компиляцию указанное присваивание х = 1 + 1 располагается в некоторой иной процедуре, определение которой здесь не показано. По-видимому, з в выражении 1 + 1 означает глобальную переменную з. Как и в большинстве языков программирования, объявления имен в С должны предшествовать их использованию, так что функция, расположенная до объявления глобальной переменной з, не может обращаться к ней.

и фпс 1; /* Глобальное ( хгофс( х(. ) ( /* Локальное з з.пс /* Использование локального з */ 1=3 /* Использование глобального з */ к=1+1; Рис. 1.9. Два объявления имени з Отображения среды и состояния на рис. 1.8 динамические, но из этого правила имеется несколько исключений. 1. Статическое и динамическое связывание имен с ячейками памяти.

В основном, связывание имен с ячейками памяти динамическое, и мы рассматривали несколько подходов к такому связыванию на протяжении раздела. Некоторые объявления, такие как глобальная переменная з на рис. 1.9, могут определять местоположение в памяти раз и навсегда при генерации объектного кода компилятором.з 2. Статическое и динамическое связывание ячеек памяти со значениями. Связывание ячеек памяти со значениями (вторая стадия на рис.

1.8) также в общем случае динамическое, поскольку до выполнения программы мы 'Технически компилятор С назначает глобалы<ой переменной з местоположение в виртуальной памяти, оставляя задачу определения конкретною местоположения г в физической памяти машины загрузчику и операционной системе. Однако мы не должны беспокоиться о вопросах такого "перемещения", которое не оказывает никакого влияния на процесс компиляции. Вместо этого мы рассматриваем адресное пространство, используемое компилятором для выходного кода, как если бы это была физическая память.

61 Бб. Азы языков программирования Имена, идентификаторы и переменные Хотя термины "имя" и "переменная" часто означают одно и то же, мы аккуратно используем их для того, чтобы отличать имена времени компиляции от местоположений в памяти во время выполнения программы, обозначаемых зтими именами. Идентификатор (Ыепббег) представляет собой строку символов, обычно букв или цифр, которая ссылается (идентифицирует) на некоторую сущность, такую как объект данных, процедура, класс или тип.

Все идентификаторы являются именами, но ие все имена — идентификаторы. Имена могут также быть выражениями. Например, имя х.у может означать поле у структуры, обозначенной как х. Здесь х и д — идентификаторы, в то время как х.у — имя, но не идентификатор. Составные имена наподобие х.у называются квалифицированными именами (г(ца1(бег) пагпез).

Переменная (айаг(аЫе) ссылается на конкретное местоположение в памяти. Достаточно распространена ситуация, когда один и тот же идентификатор объявлен более одного раза; каждое такое объявление вводит новую переменную. Даже если каждый идентификатор обьявлен только один раз, идентификатор, локальный для рекурсивной процедуры, в различные моменты времени обращается к различным местоположениям в памяти.

не можем сказать, какое значение находится в конкретной ячейке памяти. Исключением является объявление констант. Например, определение языка программирования С яс1ей1пе АКВАУБ1ЕЕ 1000 статически связывает имя АЕВАУЯ1ЕЕ со значением 1000. Мы можем определить зто связывание, взглянув на указанную инструкцию, и мы знаем, что изменение данного связывания в процессе выполнения программы невозможно. 1.6.3 Статическая область видимости и блочная структура В большинстве языков программирования, включая С и его семейство, используется статическая область видимости. Правила области видимости для С основаны на структуре программы; область видимости объявления явно определяется тем, где в программе находится это объявление. Более поздние языки Глава 1.

Введение в компиляпию программирования, такие как Сч-ь, 5ака и С№, предоставляют явные средства управления областями видимости при помощи ключевых слов наподобие риЫ!е, рг!ка$е и рго(ес!ед. В этом разделе мы рассмотрим правила статических областей видимости для языков программирования с блоками, где блок (Ыос1с) представляет собой сгруппированные объявления и инструкции. В языке программирования С для ограничения блока используются фигурные скобки ( и 1; той же цели служили ключевые слова Ьея!п и епй в А!Бо!.

Пример 1.5. В качестве первого приближения стратегия статических областей видимости языка программирования С следующая. 1. Программа на С состоит из последовательности обьявлений переменных и функций верхнего уровня. 2. Функции могут содержать в себе объявления переменных, где переменные включают локальные переменные и параметры. Область видимости каждого такого объявления ограничена функцией, в котором оно появляется. 3. Область видимости объявления верхнего уровня имени х состоит из всей программы, следующей после объявления, за исключением инструкций, которые располагаются в функции, также содержащей объявление х. Дополнительные детали стратегии касаются объявлений переменных в инструкциях.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее