Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

25 Методы оптимизация промежуточного кода.

В зависимости от уровня представления программы различают следующие виды оптимизации:

Оптимизацию на уровне исходного языка. При этом в результате трансформации получается программа, записанная в том же самом языке.

Машинно-независимую оптимизацию. В этом случае преобразованию подвергается программа на уровне машинно-независимого промежуточного представления, общего для группы входных или машинных языков.

Машинно-зависимую оптимизацию, то есть оптимизацию на уровне машинного языка.

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

Другим важным для качества оптимизации соображением является также размер участка экономии, то есть того фрагмента программы, в рамках которого производится оптимизирующее преобразование. Чем больше участок экономии, тем больше информации о свойствах программы доступно оптимизатору. Классификация оптимизации относительно участка экономии приведена на слайде.

26 Программные средства генерации лексического анализатора.

LEX, ANTRL

27 Программные средства генерации синтаксического анализатора.

BISON, NATRL

28 Критерии оценки языков программирования.

Категории языков:императивные,функциональ­ные.логические,объектно-ориентированные

Легкость эксплуатации в основном определяется легкостью чтения и понимания программ. Читабельность необходимо рассматривать в контексте определенной при­кладной области.

Простота

Язык, содержащий большое количество элементарных конструкций, изу­чить сложнее, чем язык, в котором их меньше. Второй характеристикой является множественность свойств, наличие нескольких способов совершения какого-либо действия.Третьей проблемой является перегрузка операторов. Это свойство полезно, однако может ухудшить читабельность программы, если пользователи создают собственные перегруженные операторы без разумных оснований.

Ортогональность

Управляющие операторы и структуры данных языка можно выразить с помощью относительно небольшого количе­ства элементарных конструкций (primitive constructs), пользуясь ограниченным числом способов.

Ортогональность тесно связана с простотой: чем более ортогональной является структура языка, тем меньше исключений из правил, значит язык более систематичен, его легче изучать, а программы - легче читать и писать. Языки функционального программирования просты, они могут выполнять все что угодно с помощью простой конструкции: вызова функции, который может легко комбинироваться с другими вызовами функций. Вследствие этой элегантности некоторые исследователи отдают предпочтение языкам функционального программирования как основной альтер­нативе таким сложным языкам нефункционального программирования, как C++.

Управляющие операторы

Беспорядочное использование операторов безусловного пере­хода goto значительно снижает читабельность программы. Программа, которую можно прочесть от начала до конца, значительно проще для понимания, чем программа, для прослеживания хода выполнения которой читателю требуется переходить от одного опе­ратора к другому, находящемуся в любом месте программы. Однако в некоторых языках использование операторов goto для возврата назад просто необходимо. Улучшить чита­бельность программы могут следующие ограничения, налагаемые на использование опе­раторов безусловного перехода to.

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

Точки перехода никогда не должны находиться слишком далеко.

Количество операторов безусловного перехода должно быть ограничено.

Типы и структуры данных

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

Анализ синтаксической структуры

Формы идентификаторов. Ограничение длины идентификаторов до очень маленьких размеров уменьшает читабельность. Специальные слова, Форма и значение. Облегчить чтение программы могут также операторы, само появление которых хотя бы отчасти указывает на их цели. С

Легкость создания программ

Простота и ортогональность: Если язык содержит много разнообразных конструкций, то некоторые программисты могут просто не знать каждую из них.

Поддержка абстракции: Абстракция - это возможность определять, а затем использовать сложные структуры или операции, игнорируя при этом многие детали. Абстракция - это ключевая концепция разработки современных языков программирования. Высокая степень абстракции, допускаемая языком программирования и его выражениями, значительно облегчает его использование. Языки программирования поддерживают две различные категории абстракции: абстракцию процессов и абстракцию данных. Полная поддержка абстракции значительно влияет на легкость исполь­зования языка.

Выразительность: Выразительность языка может относиться к нескольким различным характеристикам. В языке, подобном языку APL, она означает наличие очень мощных операторов, позво­ляющих производить большое количество вычислений с помощью очень маленькой про­граммы.

Надежность: Программа называется надежной, если она соответствует своему предназначению в любых условиях.

Проверка типов: Это обычная проверка совместимости типов в программе, осуще­ствляемая при компиляции либо при выполнении программы.

Обработка исключительных ситуаций:Позволяет перехватывать ошибки и другие необычные ситуации во время выполнения программы, принимать соответствующие меры, а затем продолжать работу. Это значительно повышает надежность программ. Языки Ada, C++ и Java позволяют обрабатывать исключительные ситуации, однако во многих широко используемых языках, таких как С или FORTRAN, эти возможности практически отсутст­вуют.

Совмещение имен:Наличие нескольких разных имен у одной и той же ячейки памяти.

Легкость чтения и использования: На надежность программы влияет как легкость ее чтения, так и легкость ее создания.