Автор работы: Пользователь скрыл имя, 18 Февраля 2012 в 18:00, реферат
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов - языков программирования. Смысл появления такого языка – оснащенный набор вычислительных формул дополнительной информации, превращает данный набор в алгоритм. Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать
Введение 3
Языки программирования 4
Виды программ – трансляторов 6
Виды компиляторов 7
Командный интерпретатор 11
Заключение 15
Список литературы 16
Содержание
Введение 3
Языки программирования 4
Виды программ – трансляторов 6
Виды компиляторов 7
Командный интерпретатор 11
Заключение 15
Список
литературы 16
Введение
Прогресс компьютерных
технологий определил процесс появления новых
Языки программирования
Программирование для универсальных компьютеров прошло большой путь развития от программирования в машинных кодах до применения современных интегрированных систем написания программ, отладки и программирования микроконтроллеров. В настоящее время исходный текст программы пишется на одном из языков программирования.
Сами языки программирования в свою очередь делятся на две группы:
- языки программирования "высокого" уровня
- языки программирования "низкого" уровня.
К языкам программирования
"низкого" уровня относятся языки
- Язык программирования рассчитывается на все случаи жизни, поэтому в большинстве случаев человек мог бы написать программу короче (исключив не нужные в данном конкретном случае проверки или защиты).
- Программист не видит к чему приводит использование тех или других операторов языка программирования, поэтому может выбирать операторы, не оптимальные как с точки зрения длины машинного кода программы, так и с точки зрения быстродействия программы.
- Программист не использует подпрограммы там, где они могли бы сократить объём программы, так как на языке программирования высокого уровня это всего один или несколько операторов.
Первый из этих
пунктов постепенно утрачивает своё значение
с появлением всё более совершенных трансляторов.
Третий пункт тоже решается тем же путём
при применении различных видов оптимизаторов,
входящих в состав компилятора. Однако
в большинстве случаев оптимизатор не
может определить одинаковые действия,
если они отличаются хотя бы одной командой.
Кроме того, оптимизатор работает только
в пределах одного модуля!
Виды программ – трансляторов
Процесс
преобразования операторов исходного
языка программирования в машинные коды
микропроцессора называется
Рисунок
1. Классификация
программ-трансляторов
языков программирования.
Существует
два больших класса программ-трансляторов:
Виды компиляторов
Программы-компиляторы
бывают оценочные и профессиональные.
Оценочные или учебные компиляторы позволяют
написать простейшие программы для конкретного
процессора и определить подходит ли процессор
для тех задач, которые предстоит решать
в процессе разработки устройства. Конечно,
если программа очень проста, то можно
весь программный продукт написать на
оценочном компиляторе. Оценочные компиляторы
позволяют транслировать одиночный файл
исходного текста программы. Иногда такие
компиляторы позволяют включать в процесс
трансляции содержимое отдельных файлов
специальной директивой. В результате
работы оценочного компилятора сразу
получается исполняемый или загрузочный
модуль программы, поэтому такие компиляторы
называются компиляторы с единой трансляцией.
Профессиональные
трансляторы позволяют производить
трансляцию исходного текста программы
по частям. Это позволяет значительно
сократить время трансляции исходного
текста программы, так как не нужно транслировать
весь текст программы, а можно транслировать
только ту часть программы, которая менялась
после предыдущей трансляции.
Кроме того, каждый программный модуль
может писать отдельный программист. Это
позволяет сократить время написания
программы. Даже в том случае, если программу
пишет один человек, время написания программы
сокращается за счёт использования готовых
отлаженных и оттранслированных программных
модулей. В таких компиляторах процесс
трансляции программы разбивается на
два этапа: трансляция программного модуля
и связывание программных модулей в единую
программу. Поэтому такие компиляторы
называются компиляторами с раздельной
трансляцией.
Оценочные компиляторы обычно предлагаются
бесплатно фирмами - производителями микроконтроллеров.
Только фирма Intel предложила в своё время
профессиональный пакет разработки программ
- язык программирования PLM-51 в состав которого
входит профессиональный язык программирования
ASM-51. Профессиональные компиляторы разрабатываются
и продаются отдельными фирмами. Для микроконтроллеров
семейства MCS-51 получили известность продукты
таких фирм как FRANCLIN, IAR, KEIL. В состав современных
средств написания и отладки программ
для микроконтроллеров обычно входят
эмуляторы процессоров или отладочные
платы, текстовый редактор, компиляторы
языка высокого уровня (чаще всего "C")
и ассемблера, редактор связей и загрузчик
программы в отладочную плату. Все программы
обычно объединены интегрированной средой
разработки программного проекта, позволяющую
поддерживать один или несколько программных
проектов.
Писать компилятор приходится чаще, чем
обычно думают. Практически всякая большая
система включает в себя входной язык
- от примитивного до весьма сложного.
Вспомним хотя бы dBASE - это ведь не язык
программирования, а система баз данных.
На нее даже программы пишутся. А раз нужен
входной язык, то бывает нужен и компилятор.
И часто нужен быстро. Конечно, всякий
предпочтет компактный, быстрый, хорошо
оптимизирующий компилятор, но далеко
не всякому понравится такой компилятор
писать.
Чтобы писать сложные, эффективные и быстрые
компиляторы, есть много рецептов. Но здесь
речь пойдет не о них. Как написать компилятор
просто - вот в чем вопрос! Ведь такой компилятор
и короче, и отлаживается легче. Здесь
не будет каких-то хитрых алгоритмов, позволяющих
достигать чудес эффективности или каких-
то особенных способов организации данных.
Увы, с этими способами одна проблема:
заставить их работать может только чудо.
А в этой статье - только практические
рекомендации, а работают они надежно!
Модельный компилятор. Лучший способ понять,
как писать компилятор - написать его самому.
Лучший способ объяснить это - предъявить
текст программы. Вот мы и предлагаем статью-программу.
Впрочем, ее можно читать и не заглядывая
в листинг, но при этом вы много потеряете.
Компилятор написан на Паскале, выходной
язык - Паскаль, входной язык прост до идиотизма. Читатели,
владеющие с языком Паскаль, узнают и во
входном языке знаковые конструкции. Наш
модельный компилятор состоит из четырех
частей: сканер, блок таблиц имен, основная
часть компилятора и семантические подпрограммы.
В том или ином виде эти части можно встретить
в любом компиляторе. Сканер - это глаза
компилятора, который обращается к тексту
программы только через него. Сканер читает входной
файл и избавляет остальные части копилятора
от необходимости следить за каждым входным
символом. В таблице имен хранится информация
о переменных программы. Обращение к ней
осуществляется в основном через процедуры
блок таблицы имен.
Среди
всех конструкций, воспринимаемых компилятором,
есть минимальные, и которые уже не несет
смысла делить на части. Например: идентификатор,
число, строка, ключевое слово. Они называются
лексемами. Компилятору нет нужды разбираться
в их структуре. Кстати, в описании старого,
доброго Алгола-60 использовался термин
иероглифы, то есть нечто такое, что можно
обозначить значком. Но у компьютера всего-то
256 символов - и приходится писать, например,
"procedure". А посему идея следующая:
отдельная процедура считывает программу
из файла, выделяет оттуда лексемы и передает
их основной части компилятора. А той до
текста программы уже нет никакого дела.
Такаяподпрограмма называется сканером.
В языке SIMPLE существуют пять видов лексем
(pис.2): ключевые слова, идентификаторы,
числа, спецсимволы и нечто в квадратных
скобках. По поводу первых четырех типов,
кажется, все ясно - см. рисунок. А пятый,
последний - это наша хитрость. Дело в том,
что компиляция выражений - это вопрос
особый, и ему будет посвящена следующая
статья. Поэтому, пользуясь тем, что выходной
язык у нас Паскаль, мы перекладываем эту
задачу на плечи компилятора с Паскаля.
А чтобы у нас не возникало проблем - информацию,
которые мы просто переписываеми в выходной
файл, не разбираясь в его внутренней структуре,
заключаем в квадратные скобки.
Посмотрим
на текст программы (Пример 1. Сканер).
Основная процедура сканера - Scan. Вызывая
ее, мы получаем очередную лексему. Мы
можем даже считать ее аналогом процедуры
ввода - со странного устройства, которое передает
внутрь компьютера лексемы. Процедура
Scan по первом символу лексемы определяет,
что за лексема нас сейчас ждет, и вызывает
"специализированную" процедуру,
которая только этим типом лексем и занимается.
Единственная загвоздка здесь - ключевые
слова путаются с именами. Поэтому они
считываются вместе, а уж потом одно отделяются
от другого. Обратим внимание на вспомогательные
процедуры GetCh и UngetCh. Процедура GetCh заменяет
сиволы перевода строки и табуляции на
пробелы и пропускает лишние пробелы (так
получается, что несколько пробелов подряд
эквивалентны одному). Процедура UngetCh используется,
если мы погорячились" и считали "лишний"
символ. Тогда с помощью этой процедуры
можно сказать: "Возьми обратно!"
Процедура GetCh выдаст в следующий раз тот
же символ.
Таблица Имен