ВУЗ:
Процесс перевода. Процесс перевода программы с одного языка на другой называется трансляцией (translation). Про-
грамма в своем оригинальном виде называется исходной программой (sourse program), а оттранслированная ее версия назы-
вается объектным кодом программы (object program). Процесс трансляции состоит из трех этапов – лексического анализа,
синтаксического разбора и генерации кода, которые выполняются элементами транслятора, называемыми лексическим ана-
лизатором (lexical analyzer), синтаксическим анализатором (parser) и генератором кода (code generator) (рис. 5.12).
Рис. 5.12. Процесс трансляции программы
В процессе лексического анализа распознаются цепочки символов, которые представляют собой отдельные элементы.
Например, символы '153' должны интерпретироваться транслятором не как совокупность цифр, состоящая из единицы, пя-
терки и тройки, а как единое числовое значение, равное ста пятидесяти трем. Аналогично этому, слова в программе пред-
ставляют собой самостоятельные и неразделимые единицы текста, хотя и состоят из отдельных символов. Большинство лю-
дей выполняют лексический анализ без каких-либо видимых усилий. И действительно, когда нас просят прочитать текст
вслух, мы произносим целые слова, а не те отдельные буквы, из которых они состоят.
Таким образом, лексический анализатор символ за символом считывает текст исходной программы, определяя, какие
группы символов образуют самостоятельные единицы текста. Затем эти единицы классифицируются, чтобы выяснить, что
они собой представляют – числа, слова, арифметические операторы и т.д. Как только единица текста классифицирована,
лексический анализатор генерирует ее битовый образ, называемый лексемой (token), и передает его синтаксическому анали-
затору. При выполнении этого процесса лексический анализатор игнорирует все комментарии, содержащиеся в тексте ис-
ходной программы.
Реализация языка Java. При использовании анимированной Web-страницы управляющее анимацией программное обеспечение
передается через Internet вместе с самой страницей. Если программное обеспечение представляет собой исходный текст программы,
то при просмотре страницы возникает дополнительная задержка, связанная с трансляцией программы в соответствующий машинный
язык. Однако если это программное обеспечение пересылать сразу на машинном языке, то может оказаться, что для разных типов ма-
шин потребуются различные версии программы.
Фирма Sun Microsystems решила эту проблему, разработав универсальный "машинный язык", названный байт-кодом, на который
переводятся исходные тексты программ, написанные на языке Java. Хотя байт-код не является настоящим машинным языком, под-
ходящий интерпретатор сможет выполнить его достаточно быстро. В настоящее время такие интерпретаторы уже стали стандартной
частью любых Web-броузеров. Поэтому, если управляющее Web-страницей программное обеспечение написано на языке Java и переве-
дено в байт-код, то эту байт-кодовую версию программы можно передавать любому броузеру, что гарантирует эффективную анимацию
изображений при просмотре данной Web-страницы.
Из сказанного выше можно прийти к заключению, что синтаксический анализатор анализирует программу в терминах
лексических единиц (лексем), а не отдельных символов. Задачей синтаксического анализатора является объединение этих
единиц в операторы. Действительно, в процессе синтаксического анализа производится идентификация грамматической
структуры программы и распознавание роли каждого ее компонента. Это – техническая сторона синтаксического разбора,
которая может привести к некоторой задержке при чтении следующего предложения.
Человек, которого лошадь, проигравшая скачки, сбросила, не был ранен.
Чтобы упростить процесс синтаксического разбора, ранние языки программирования требовали, чтобы каждый опера-
тор программы размещался в определенном месте бланка исходного текста. Такие языки называются языками с фиксирован-
ным форматом (fixed-format languages). В настоящее время большинство языков программирования являются языками со
свободным форматом. Это означает, что расположение операторов в тексте не имеет значения. Преимущество свободного
формата состоит в том, что программист теперь может писать программу так, чтобы человеку было легко ее читать. В таких
программах принято использовать отступы, чтобы помочь читателю понять внутреннюю структуру оператора. Например,
рассмотрим следующий оператор:
if Cost < Cash on hand then pay with cash else use credit card
При использовании свободного формата программист может записать этот же оператор в более удобном виде:
if Cost < Cash on hand
then pay with cash
else use credit card
Для того чтобы машина могла выполнять синтаксический анализ программы, написанной на языке со свободным фор-
матом, синтаксис языка следует разрабатывать таким образом, чтобы структуру программы можно было идентифицировать,
не обращая внимания на пробелы в исходном тексте программы. По этой причине во многих языках со свободным форматом
для обозначения конца оператора используются знаки пунктуации (например, точка с запятой), а также ключевые слова (key
words), такие, как if, then и else, предназначенные для выделения начала отдельных фраз. Эти ключевые слова обычно
называют зарезервированными словами (reserved words), чтобы подчеркнуть, что программист не может использовать их в
своей программе для иных целей.
Процесс синтаксического анализа базируется на совокупности правил, определяющих синтаксис языка программирова-
ния. Один из способов представления этих правил состоит в использовании синтаксических диаграмм (syntax diagram), на-
Страницы
- « первая
- ‹ предыдущая
- …
- 124
- 125
- 126
- 127
- 128
- …
- следующая ›
- последняя »