Главная » Просмотр файлов » Л.Е. Карпов - Системы программирования

Л.Е. Карпов - Системы программирования (1114903), страница 9

Файл №1114903 Л.Е. Карпов - Системы программирования (Л.Е. Карпов - Системы программирования) 9 страницаЛ.Е. Карпов - Системы программирования (1114903) страница 92019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Фактически ее решение приводит к тому, что с конечным автоматом,лежащим в основе лексического анализатора, ассоциируют не только входной язык, нои выходной. Автомат должен не только распознать правильную лексему на входе, но ипородить связанную с ней последовательность символов на выходе.

Тем самым,конечный автомат превращается в конечный преобразователь. Однако лексическийанализатор не может действовать, как простой преобразователь, его задача шире, чемтолько порождение цепочки символов выходного языка. Он должен уметь выполнятьтакие действия, как запись выделенной лексемы в таблицу лексем, поиск ее в таблице32идентификаторов или в таблице констант, а также запись нового имени или новойконстанты в соответствующую таблицу. Часто подобные действия выполняютсянепосредственно при обнаружении лексемы в исходном тексте.Выбирая тот или иной способ представления таблиц в программах компилятора,следует руководствоваться следующими требованиями к ним:•••Структура таблиц должна обеспечивать эффективность поиска в таблицах;Структура таблиц должна обеспечивать эффективность вставок в таблицы(имеются в виду, как вставки новых элементо в, так и вставки но войинформации в ранее имевшиеся записи);Структура таблиц должна обеспечивать возможность динамического ростаобъемов таблиц.Влияет на программу реального лексического анализатора и необходимостьотслеживать возможные ошибки в тексте исходных программ.

Анализатор долженпринимать меры для максимально более полной локализации ошибок, причем нетолько лексических, но также и синтаксических и семантических.3.3.2. Задачи семантического анализаСемантический анализ пользуется всеми результатами предыдущих стадийкомпиляции. Со стороны лексического анализатора ему передаются все созданныетаблицы (идентификаторов, констант и т. д.), а со стороны синтаксическогоанализатора – результаты синтаксического разбора конструкций языка.

Эти результатыпредставляются на выходе синтаксического анализатора в одной из форм внутреннегопредставления программ в компиляторе. Обычно на этапе семантического анализаиспользуются некоторые варианты синтаксических деревьев, построенных в результатесинтаксического разбора. Такое древовидное представление программы удобно дляпроведения семантического анализа потому, что для анализа семантикикомпилируемой программы важно знать именно общую структуру этой программы.Семантический анализ в свою очередь тоже может разделяться на отдельныестадии. Одна из них вполне может совмещаться с синтаксическим анализом ипроводится параллельно с ним.

Другая стадия выполняется позднее, когда завершенсинтаксический анализ последней конструкции программы и начинается подготовка кгенерации объектной программы. Первая часть выполняется после завершениясинтаксического анализа очередной конструкции входного языка (процедуры,функции, блока операторов и т. п.) на основе имеющихся в информационных таблицахданных. Вторая часть связана с проведением полного семантического анализа всейпрограммы.Независимо от выбранного способа реализации основная работа семантическогоанализатора связана•••с проверкой соблюдения во входной программе семантических соглашений иконтекстных условий входного языка,с включением во внутреннее представление компилируемой программыдополнительных операторов, связанных с семантикой входного языка,с проверкой семантических (смысловых) норм языка, напрямую несвязанных с входным языком и его синтаксисом.33Проверки,выполняемыесемантическиманализатором,называютсястатическими проверками.

Они отличаются от динамических проверок, выполняемых впроцессе работы программы.3.3.2.1. Проверка контекстных условийПроверка семантических соглашений и контекстных условий заключается всопоставлении входных цепочек исходной программы с требованиями семантики языкапрограммирования. Такие соглашения есть в каждом языке, проверять их на этапесинтаксического анализа невозможно. Обычными видами статических проверок вкомпиляторах являются1. Проверки типов. Компилятор обязан сообщить об ошибке, если в программепредписано выполнить некоторую операцию с несовместимым с нейоперандом, например, произвести сложение указателей.2.

Проверки управления. Передача управления за пределы синтаксическихконструкций должна производиться только в разрешенные места программы.Например, в языках Си и Си++ оператор выхода из цикла break можетвстречаться только внутри операторов цикла или перебора. Любое другое егоупотребление должно приводить к сообщению об ошибке.3. Проверки единственности. В определенных ситуациях объект можетупотребляться только один раз.

Например, во многих языкахпрограммирования, где есть оператор перебора, все метки в конструкцииописания альтернативы case должны быть уникальными, элементы вперечислениях enum также не должны повторяться.4. Проверки, связанные с именами. Иногда одно и то же имя должноиспользоваться дважды или большее число раз. Компилятор долженпроверять, что во всех местах использовано одинаковое имя. Например, вязыке Ада пр оцедур а блок или цикл мо жет иметь имя, которое должнонаходиться и в начале, и в конце синтаксической конструкции.К типичным для многих языков контекстным условиям относятся такиесемантические ограничения:•••••••любое имя, используемое в программе, должно быть описано, причем толькоодин раз;в операторе присваивания типы переменной и выражения должны совпадать(либо относиться к некоторым семантически близким типам);в условном операторе и в операторе цикла в качестве условия возможнотолько логическое выражение;операнды операций отношения должны быть целочисленными (либо иметькакие-либо другие, но точно известные типы);тип выражения и совместимость типов операндов в выраженииопределяются по определенным для данного языка правилам; старшинствоопераций обычно задано синтаксическими правилами;каждая метка, на которую есть ссылка или переход, должна один разприсутствовать в программе (несколько вхождений одной метки легкопроверяются во время анализа синтаксиса);единственность описаний идентификаторов рассматривается с учетомблочной структуры программы;34••при вызове функции число фактических параметров и их типы должнысоответствовать числу и типам формальных параметров;обычно в языке накладываются ограничения на типы операндов любойоперации, определенной в этом языке; на типы левой и правой частей воператоре присваивания; на тип параметра цикла; на тип условия воператорах цикла и условном операторе и т.

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

Семантический анализатор долженфиксировать все случаи нарушения семантических соглашений и условий, найденныеим в программе, и выдавать сообщения о семантических ошибках в программе.3.3.2.2. Дополнение внутреннего представленияМногие языки запрещают смешивать в выражениях операнды даже “близких”типов, например, использовать рядом операнды вещественных и целочисленных типов,знаковых и беззнаковых типов и т. д. Однако большинство реальных языковпрограммирования допускает некоторые вольности при записи выражений, гарантируя,что в компиляторах будут предприняты меры по согласованию типов. Абсолютноаналогичная работа выполняется при обработке операций обращения к функциям ипроцедурам с параметрами.Задача семантического анализатора состоит в поиске всех мест, где нужновыполнить подобные преобразования типов и вставить во внутреннее представлениеявные команды преобразования.

Иногда эти преобразования тривиальны и состоят изодной-двух команд, а иногда они выполняются встроенными библиотечнымифункциями.Преобразования типов могут производиться не только по отношению к простымарифметическим данным. Во многих языках существуют данные, позволяющиессылаться на другие данные – указатели и ссылки. Иногда операция доступа к даннымпо указателю приводит к введению в программу целой серии команд по настройкевнутренних регистров, выделению фрагментов данных, размеры которых не кратныцелому числу машинных слов или байтов и т. д.Все это означает, что действия, выполняемые при семантическом анализекомпилируемой программы, существенным образом влияют на порождаемыекомпилятором объектные программы.3.3.2.3.

Проверка правил программированияМногие современные компиляторы не только проверяют ограничения итребования, выставляемые семантикой языка, но также выполняют дополнительныепроверки, способствуя выработке “правильного” стиля программирования. Во многихязыках программирования действуют правила хорошего программирования.•Каждая переменная или описанная константа программы должна бытьиспользована в программе хотя бы один раз.35•••••Каждая переменная программы должна получить значение до своего первогоиспользования (например, до использования в правой части оператораприсваивания).Результат вычисления функции должен быть определен при любом ходе еевыполнения (например, независимо от выбора исполняемых ветвей вусловных операторах).В программе не должно быть невыполняемых в принципе операторов.Каждый оператор программы должен иметь потенциальную возможностьвыполниться хотя бы один раз.Условные операторы (всех разновидностей) должны предусматриватьвозможность хода выполнения программы по любой из своих ветвей.Операторы цикла должны предусматривать возможность завершения цикла.3.3.2.4.

Разнесение имен по пространствам именованияРаспределение использованных в программе идентификаторов по пространствамименования есть одна из важных задач этапа семантического анализа. Требованияразличных языков программирования, предъявляемые к именам используемых впрограммах объектов, распространяются на имена объектов, относящиеся к однимпространствам именования и видимости. С одной стороны это означает, что объектынельзя использовать вне тех блоко в, где они описаны и видны, с другой стороны, этоослабляет требования уникальности имен, поскольку объектам, относящимся к разнымблокам, можно давать одинаковые имена, не внося при этом путаницы в программу.На этапе лексического анализа разрешить все эти проблемы абсолютноневозможно – там уникальность имен определяется только их записью какпоследовательности букв, цифр и других разрешенных символов. На более позднихстадиях компиляции одинаково записываемые имена необходимо заменять на новыеуникальные в пределах всей программы.

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

Тип файла
PDF-файл
Размер
1,45 Mb
Тип материала
Высшее учебное заведение

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

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