Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 28
Текст из файла (страница 28)
— Ггрижен. неун. ред. 98 Глава 3, Вопросы трансляции языка содержится свой ряд специальных символов. Обычно выбирается один из таких стандартных наборов, хотя иногда используется какой-либо специальный нестандартный набор, как, например, это сделано в АР(.. Выбор допустимого множества символов важен для определения типа устройств ввода-вывода, которые могут быть использованы в реализации языка. Например, множество основных символов языка С доступно почти на всех устройствах ввода-вывода, в то время как множество символов языка АР1 невозможно непосредственно использовать в большинстве устройств ввода-вывода. Использование 8-битных байтов для представления символов (один символ— один байт) в начадге 60-х гг., когда произошел переход от 6-битового к 8-битовому представлению символов, казалось весьма разумным выбором.
Таблица из 256 символов казалась более чем достаточной для того, чтобы представить в верхнем и нижнем регистрах 52 буквы латинского алфавита, десять цифр и несколько знаков препинания. Но в наше время компьютерная индустрия стала гораздо более интернациональной. Не все (на самом деле очень немногие) страны используют один и тот же набор из 26 букв латинского алфавита. В испанском алфавите присутствует гильда (-), во французском — диакритические знаки (,, ), а в других языках— и некоторые дополнительные специальные символы (например, а, (3, б и др.).
Кроме того, имеются такие языки, как греческий, иврит и арабский, где набор символов радикально отличается от существующего в европейских языках. Представление китайского или японского языка, в которых каждый иероглиф соответствует слову или фразе, требует набора, состоящего из примерно 10 000 символов. Во всех этих случаях, очевидно, недостаточно однобайтного представления символов. Разработчики языков сейчас все больше склоняются к двухбайтному представлению символов (в котором каждый символ представляется шестнадцатью битами, что расширяет количество допустимых символов до 65 536) г. Идентификаторы.
Для идентификаторов широко используется следующий синтаксис — строки, состоящие нз букв и цифр, начинающиеся с буквы. Различия между правилами составления идентификаторов в разных языках сводятся к включениюю в допустимый набор букв и цифр некоторых специальных символов, например точки или дефиса (что облегчает восприятие при чтении программы), и тому или иному ограничению длины идентификатора. Ограничение длины (например, в ранней версии языка ВАЯ1С эта длина не превышала одной буквы и последующей цифры) вынужпает программиста использовать идентификаторы, лишенные выраженного мнемонического значения, что приводит к значительной потере удобочитаемостп программы.
Символы операций. В большинстве языков символы «ь» и <-ь используются для обозначения двух основных арифметических операций, но на этом сходство в использовании символов для одинаковых операций в разных языках и заканчивается. Все простейшие операции могут быть представлены исключительно специальнымн символами, как это сделано в АР1.; можно, наоборот, для представления всех этих операций использовать идентификаторы, как, например, это сделано в язы- В иастояысе время наиболее уп<>треб ительиые языки, особе и во тс, которые использую гся для создаиия И и горист-приложений, иоддерживакп, а некоторые, иаориьюр 1ача и Рег!, использую ~ как внутреииее арслставлеиие символов двухбай гиую кодировку Игисобе (ИТР-В). — Цричеч.
науч. ред. 3,1. Синтаксис языка программирования 99 ке 1.1БР: РШБ для сложения, Т!МВЗ для умножения и т. д. В болыпипстве языков применяется некая комбинация упомянутых подходов; для обозначения некоторых операций используются символы, для других — ияецтификаторы, и также часто используются строки символов, которые нельзя отнести к какой-либо из предылущих двух категорий (например, в языке РОВТКАХ послеловательности .ГО, и ** используются для обозначения соответственно операций сравнения на равенство и возведения в степень).
Ключевые и зарезервированные слова. ключевое слово — это идею ификатор, используемый в качестве фиксированной части синтаксиса какого-либо оператора (например, слово 1Е, служащее началом условного оператора в языке С, или слово Еаг, начинающее оператор цикла). Ключевос слово является зарезервипованным, если синтаксис запрещает его использование в качестве идентификатора, определяемого программистом.
Зарезервировагшые слова имеются в большинстве используемых в настоящее время языков программирования, улучшая, таким образом, возможности транслятора по обнаружениюсинтаксических ошибок. Большинство операторов начинаются с зарезервированного слова, указывающего на тип оператора: кЕАО,!Е, НН1ЕЕ и т, д. Использование зарезервированных слов облегчает синтаксический анализ во время трапсляпии. В языке ГОКТКАХ, например, синтаксический анализ осложняется из-за того, что оператор, начинающийся со слов 00 или 1Е, может не быть оператором цикла или условным оператором. Поскольку 00 и 1Е не являются зарезервированными словами, программист имеет полное право использовать их в качестве имен переменных.
В языке С О ВОН ситуация в некотором смысле противоположная — зарезервированных слов так много, что все их почти невозможно запомнить; в результате человек может случайно употребить какое-либо из этих слов в качестве имени переменной. Основная трудность с зарезервированными словами, однако, проявляется тогда, когда возникает необходимость в расширении языка включением новых операторов, использующих новые зарезсрвированные слова (как происхолило, например, при пересмотре языка СОВОК). Добавление нового зарезервированного слова означает, что любая программа, написанная ранее на этом языке, становится синтаксически неправильной, если в ней используется в качестве имени переменной (или в каком-либо ином качестве) введенное в очерецной стандарт новое зарезервированное слово, хотя сама программа при этом никак пе была изменена.
Необязательные слова. Необязательные слова — зто слова, которые вставляются в операторы для улобства чтения. Множество таких слов имеется в языке СОВО1.. Например, оператор 0сгс в СОВ01., записан пьщ в форме 00 Е0 ветка, представляет пример оператора, в котором ключевое слово 00 является обязательным, а 10 — необязательным. Опо це песет никакой информации, а просто облегчает чтение программы.
Комментарии. Включение комментариев в программы является важной частью ее локумсптированпя. Язык позволяет включать комментарии несколькими способамии: 1) в специальной строке комментария (папример, в программе ца ВАБ1С комментарии располагщотся в строке, начинающейся с ключевого слова кЕИ); 100 Глава 3. Вопросы трансляции языка 2) в произвольном месте программы, при этом текст комментария отделен от основного текста программы специальными маркерами (в языке С, например, таковыми служат последовательности символов !* и *Г); 3) начало комментария может располагаться в произвольном месте, но его конец должен совпадать с концом строки; так, например, в языке Аба начало комментария обозначается последовательностью дефисов — -, в ЕОКТКАМ 90— символом!, а в С~-+ — символами /А Недостаток второго из этих способов заключается в том, что если пропущен символ, обозначающий конец комментария, весь следующий далее текст программы (до конца следующего комментария) будет воспринят как комментарий.
Следовательно, он не будет обработан транслятором и не выполнится, хотя эта часть текста может выглядеть совершенно правильно при чтении программы. Пробелы. В разных языках правила использования пробелов варьируются в широких пределах. Например, в языке С пробелы не являются значащими символами, за исключением случаев их использования в строковых литералах. В других языках пробелы используются в качестве разделителей, поэтому они играют важную синтаксическую роль. В ЯХОВОгА элементарная операция конкатенации представлена пробелом, который также используется как разделитель между элементами в операторах (что приводит к большой путанице), В С пробелы по большей части игнорируются, но не всегда. В ранних версиях С пара символов «=+э являлась единой операцией, а запись = «представляла собой последовательность двух операций.
Для предотвращения подобных ошибок в определение С были внесены некоторые изменения, и теперь символ «+-» является символом комбинированной операции, а использование « = приводит к синтаксической ошибке. Разделители и скобки. Разделитель — это синтаксический элемент, функция которого заключается в обозначении начала или конца некоторой синтаксической конструкции, например оператора или выражения.
Скобки — это парные ограничители, например круглые скобки или пары типа Ье91 л, ела. Разделители могут использоваться просто для облегчения чтения программы или для упрощения синтаксического анализа, но чаше они применяются для решения серьезной задачи— устранения неоднозначности путем явного определения границ конкретной синтаксической конструкции. Свободный и фиксированный форматы. Синтаксис с фиксированным форматом записи операторов языка в программе — это пережиток эпохи перфокарт. Синтаксис называется синтаксисом со свободным форматом записи операторов, если он допускает запись операторов программы в произвольном месте строки ввода безотносительно к его положению в строке или разрывам между строками, Синтаксис с фиксированным форматом записи операторов использует определенные области строки ввода для передачи определенной информации.
Такой синтаксис, в котором каждый элемент оператора должен располагаться в определенном месте строки ввода, характерен для языков ассемблера. В настоящее время синтаксис с фиксированным форматом записи операторов встречается все реже, уступая синтаксису со свободным форматом, который теперь является нормой. Выражения. Выражения — это функции, которые обрабатывают какие-либо данные в программе и возвращают некоторые значения.