Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

5.4 Реализация языка программирования

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

5.4.1Процесс трансляции программы

Процесс преобразования программы с одного языка на другой называется трансляцией программы (translation). Программа в первоначальной форме называется исходной программой (source program); преобразованная программа называется объектной (object program). Процесс трансляции включает в себя три стадии: лексический анализ, синтаксический анализ и генерация объектного кода. Эти стадии выполняются элементами транслирующей программы, которые называются лексическим анализатором (lexical analyzer), синтаксическим анализатором (parser) и генератор объектного кода (code generator) (рис. 5.15).

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

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

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

Человек, которого лошадь, проигравшая скачки, сбросила, не был ранен.

Для упрощения процесса синтаксического анализа в ранних языках программирования каждый оператор программы располагался в определенном месте листа. Такие языки называются языками с фиксированным форматом (fixed-format languages). Сейчас большинство языков программирования являются языками с произвольным форматом, то есть в них положение оператора не является существенным. Преимущество таких языков программирования состоит в том, что программист имеет возможность располагать записанную программу так, чтобы се было легче читать человеку. В этом случае принято использовать отступы, чтобы читателю было проще понять структуру оператора. Вместо того чтобы записать

if Cost < CashOnHand then заплатить наличными else использовать кредитную карту программист может записать

if Cost < CashOnHand

then заплатить наличными

else использовать кредитную карту

Для того чтобы машина могла обработать программу, написанную на языке с произвольным форматированием, синтаксис языка должен быть таким, что определение структуры программы не зависит от количества пробелов, используемых в исходной программе. С этой целью в большинстве языков программирования для обозначения конца высказывания используются пунктуационные знаки, например точка с запятой, и ключевые слова (key words), такие как if, then и else, для обозначения начала отдельных конструкций. Такие ключевые слойа часто называют зарезервированными словами (reserved words), поскольку программист не может использовать их в программе для каких-либо других целей.