Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 26
Текст из файла (страница 26)
Проанализируйте вашу локальную операционную систему и виртуальный компьютер, предоставляемый ею программисту. Насколько хорошо операционная система нашего компьютера обеспечивает достижение перечисленных выше целей? Язык программирования ВАБ1С часто реализуется посредством полного программ ного моделирования виртуального компьютера языка ВАЯС. Если допустить, что моделирующие этот виртуальный компьютер программы написаны на языке ЕОВТКАХ (что вполне возможно), то в схеме, аналогичной той, что приведена на рис.
2А, добавится еще олин уровень, Изобразите этот дополнительный уровень. Если вы знакомы с обоими этими языками, полумайте, какие части виртуального компьк>гера языка ВА51С могут быть смоделированы при помощи программ на языке ЕОКТКАХ. В каком месте упомянутой схемы расположится тлраягляглор, который преобразует программы на языке ВАБ1С в их выполняемую форму? 3 4 2.4. Задачи и упражнения 1. Проанализируйте реализацию какого-либо известного вам языка програм- 2.4. Задачи и упражнения 91 5. Напишите какой-либо оператор на знакомом вам языке. Для каждого синтаксического компонента (имена переменных, символы операций и т, д,) перечислите все возможные связывания, необходимые для полного определения семантики данного оператора при его выполнении.
Для каждого связывания определите время связывания, используемое вэтом языке. 6. Выполните задание 5, но уже не для оператора, а для обьявления, Про объявления говорят, что они обрабатываются (е!аЬогасео), а не выполняются. Перечислите, какие связывания должны произойти для полной обработки этого объявления, и укажите времена этих связываний. 7. Посмотрите, какие языки обсуждаются в приложении. Какие из них, по вашему мнению, пе войдут в следующее издание этой книги? Какие будут наиболее популярными в течение следующих десяти лет? Рассмотрите времена связываний различных объектов, виртуальный компьютер, необходимый для выполнения программ, и другие атрибуты языка, влияющие на эффективность его использования. Глава 3.
Вопросы трансляции языка На раннем этапе разработки языков программирования (в 60-х гг., когда создавались такие языки, как ГОКТгсАН, АЕСО1., СОВО). и 1гЯР) считалось, что для написания программ достаточно соблюдения формальных правил синтаксиса. Была разработана концепция контекстно-свободной грамматики, или НФБ- грамматики (от «нормальная форма Бэкуса»), которая обсуждается в этой главе. Эта концепция с успехом применялась для спецификации синтаксиса языка, и до сих пор она является основным способом описания компонентов программы. Но со временем стало ясно, что одного синтаксиса недостаточно для решения всех вопросов, связанных с разработкой языков программирования.
В главе 4 вы найдете краткое введение в семантику языка программирования — совокупи он т ий а и г мм ость правил, определяющих смысл как языковых к с рукц, т к про ра,г в целом. 3.1. Синтаксис языка программирования Сиггтаксис, определяемый как есистема языковых категорий, относящихся к соединениям слов и строению предложений»', в языках програлгмирования описывает последовательность символов, которая составляет синтаксически правильную программу, Например, в языке С оператор Х = У+ Упредставляет собой правильную последовательность символов, а выражение ХУ+ — не является правильной последовательностью. Синтаксис предоставляет важную информацию, необходимую как для понимания программы, так и для ее трансляции в обьектную программу.
Например, почти все читатели данной книги согласятся, что значение выражения 2 е 3 х 4 равно 14, а не 20. То есть это выражение интерггретируется как 2 + (3 х 4), а пе как (2 + 3) х 4. При желании мы можем выбрать любую интерпретацию путем задания соответствующих синтаксических правил н таким образом дать транслятору О и ееоп С. П., Пнеедоеа и. Ю.
Толковый словарь русского языка г РАН; Российский фонд культуры. 2-е изд., испр. и доп. М с Аэт ь 1995. 928 с. П орипгнале здесь цнткса и ссылка ггагЪевзсегз Лемг Мог И 771снопагу, Раисеи, 1979. Мы со гли уместным в русском переводе привести цитату из толкового словаря русског о языка, — Примем. наум.
дед. не рс вод определения из рте ьзсег з 1мегм %гогы Ряс ноп агу примерно таков; » Структура предложения, состоягдего из слов, ныявлякзгггвя их взаимосвязи — Иринея,,гиьь ред. 3.1. Синтаксис языка программирования 93 указание генерировать правильную последовательность операций для вычисления значения этого выражения, Как и в случае с неоднозначнылг английским предложением «ТЬеу аге Лу1пй р!апез»', одного синтаксиса языка нелостаточно для однозначной спецификации структуры оператора. Например, в операюре Х = 2.45 + 3.67 синтаксис не скажет нам, была ли объявлена переменная Х в программе, а если и была, то является ли она переменной вещественного типа. Результат выполнения этого оператора мо- жет быть Х = 5, Х - 6 или Х - 6 12 в зависимости от того, как были определены тип переменной Х и операция сложения «+».
Если переменная Х была определена как целая переменная, а операция «+» — как целочисленное сложение, то результат будет Х = 5. Если Х вЂ” целая переменная, а < +» обозначает сложение вещественных чисел, то в итоге получится Х = 6. Если же и Х, и < +» определены как относящиеся к вещественному типу, то результат будет Х = 6,12. Таким образом, для полного описания языка программирования недостаточно только определения синтаксических структур. В языке имеются и другие атрибуты, известные под общим названием семантика, которые не всегда определяются синтаксическими правилами, но оказывают влияние на переменную.
Сюда относятся использование объявлений, операций, управление последовательностью действий и среда ссылок. Хотя описания синтаксиса недостаточно для полного понимания языка программирования, все же синтаксис является важным его атрибутом. По большей части описание синтаксиса является решенной задачей, Когда чуть позже мы будем в этой же главе обсуждать разработку транслятора, то увидим, что первая фаза— фаза синтаксического разбора исходной программы — представляет собой чисю механический процесс.
Такие инструменты, как г'АСС (Уег Апотйег Сотр11ег Сошр11ег) автоматически создают синтаксическое описание исходной программы. Использование семантики для генерирования эффективной объектной программы из заданной исходной программы все еше требует большого мастерства в сочетании с применением некоторых формальных методов. 3.1.1. Общие синтаксические критерии Основным назначением синтаксиса языка программирования является обеспечение системы обозначений для обмена информацией между программисюм и процессором языка программирования.
Выбор конкретных синтаксических структур, тем не менее, только в небольшой степени определяется необходимостью передачи конкретной информации. Например, тот факт, что значение некоторой переменной принадлежит к типу вещественных чисел, можно выразить дюжиной различных способов — посредством явного описания в языке С или неявного соглашения о выборе имен в языке РОКТКАК и т, д, При разработке деталей синтаксиса по Это предложение можно перевести двояко: «Оии летят самолетами» и «Оии являются лстяшими самолетами». — Прамеч. пер. Эта фраза имеет двоякий смысл лишь ввиду игнорирования артиклей и предлогов, ч го пе свойственио уважающему родной язык англичанину А»гернкаипьс ис столь шепетильиыс в вопросах языка, могу~ считать зту фразу и маюшсй право па супшст воз а в ис, то~да как апгли чапе посч итак»т ее заведомо ошибочной: должно быть либо «ТЬеу аге Яу1пй Ьу р1апез», либо «ТЬеу аге гЬе Яу1пя р!апек»вЂ” Примеч.
ливь ред. 94 Глава 3. Вопросы трансляции языка большей части исходят из второстепенных соображений (таких, например, как простота чтения программы), которые не связаны напрямую с основной задачей передачи информации процессору языка. Второстепенных критериев довольно много, но их можно разбить на четыре основные группы: легкость чтения, написания и трансляции программы, а также однозначность. Мы рассмотрим некоторые подходы к разработке синтаксических структур языка, которые удовлетворяют указанным (часто противоречащим друг другу) целям. Легкость чтения.
Программа легка для чтения, если структура ее алгоритма и представленные в ней данные становятся очевидны при просмотре ее текста. Легкую для чтения программу называют также самодокументируемой, так как для ее понимания не требуется никакой дополнительной документации (на практике эта цель редко достигается). Легкости чтения способствуют такие качества языка, как естественные форматы операторов, структурированные операторы, свободное использование ключевых и необязательных слов, возможность встраивания в текст программы комментариев, неограниченность длины идентификаторов, мнемонические символы операций, запись программы в свободном формате и полный набор объявлений используемых данных. Безусловно, легкость чтения программы не может гарантироваться только лишь идеологией языка, так как самая лучшая идеология не может стать панацеей от плохого программирования.
Однако синтаксические конструкции языка могут быль таковы, что даже программист, имеющий самые лучшие намерения, будет писать на этом языке неудобочитаемые программы (примером может служить АР) ). Наиболее ярко стремление к удобочитаемости выражено в С ОБОЕ, но, к сожалению, лишь за счет удобства записи н трансляции. Улучшает чтение программы такой синтаксис языка, в котором синтаксические различия отражают лежашпе в его основе семантические особенности.