Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чаплыгин А.Н. Учимся програмировать вместе с Пи...doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

§1.3. Формальные и естественные языки

Разберемся, чем языки программирования отличаются от нашего родного языка, на котором мы разговариваем с детства. Существует два вида языков: естественные и формальные.

К естественным относятся языки, на которых разговаривают люди: русский, английский, французский, арабский и другие. Скорее всего, они возникли естественным путем, когда в древности люди пытались друг другу что-то объяснить. Все они довольно сложные, хотя мы часто этого просто не замечаем. Для того чтобы упростить изучение иностранных языков, люди придумали правила и словари, в которых словам одного языка приводятся соответствия из других языков. Самыми сложным естественным языком считается санскрит: первый сборник правил санскрита (грамматика Панини, называемая «Восьмикнижие», IV век до н.э.) содержал более 4000 грамматических правил. В санскрите 8 падежей, 3 числа в именах, несколько сотен глагольных и отглагольных форм, имеются средства свободного образования многочисленных производных слов. Кроме того, в санскрите можно найти до нескольких десятков слов, символизирующих один и тот же объект, но отражающих различные смысловые оттенки, поэтому его выразительные возможности чаще всего превосходят средние потребности.

1 Читается как «си».

16

Ревизия: 170

Базовые понятия

Один из самых простых языков, на которых можно разговаривать, это эсперанто. Эсперанто придумал врач-офтальмолог Лазарь (Людовик) Маркович Заменгоф в XIX веке. Уже в детстве у Заменгофа появилась идея о том, что один общий язык помогал бы народам лучше понимать и больше уважать друг друга.

У Заменгофа были отличные способности к языкам, и еще школьником кроме родных русского, польского и идиша он изучил немецкий, французский, английский, латынь, древнегреческий, древнееврейский - всего около четырнадцати языков. Вскоре он убедился, что ни древние, ни современные языки не годятся в качестве общего. Тогда он задумал создать новый язык, который не принадлежал бы ни одному народу, был бы легок для изучения, но в то же время не уступал бы национальным языкам в гибкости и выразитель­ности. И это ему удалось - вся грамматика эсперанто (вместе с фонетическими правилами) умещается на двух печатных страницах, все слова международные, а по выразительности эсперанто не уступает (и в чем-то даже превосходит) русский. Esperanto estas tre interesa kaj esprima lingvo.

Можно ли эсперанто назвать естественным языком? Пожалуй, нет. Несмотря на то, что он живет своей жизнью и развивается естественным путем, грамматика эсперанто по-прежнему жестко формализована. Поэтому он, скорее, относится к формальным языкам.

Формальными называют языки, придуманные людьми для решения специфических задач. Например, набор специальных знаков и правил записи формул, используемых математиками для записи формул и доказательств теорем, является формальным языком. Химики так же используют свой формальный язык для записи химической структуры веществ. Языки программирования - формальные языки, предназначенные для описания алгоритмов.

Формальные языки характерны тем, что имеют четкие синтаксические правила. Например, 3+3=6 является синтаксически правильной математической записью, а 3=+б$ -нет. Н20 - синтаксически правильная химическая формула вещества, a 2Zz - нет.

Когда вы читаете предложение на русском языке или выражение на формальном языке, вы определяете его структуру, часто неосознанно. Этот процесс называется синтаксическим анализом или синтаксическим разбором. Эквивалентный англоязычный термин -parsing.

Например, когда вы читаете фразу «Мама мыла раму», вы по пробелам определяете начало и конец слов и только после этого находите подлежащее («мама») и сказуемое («мыла»). Разобрав синтаксическую структуру, вы можете понять ее смысл - семантику.

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

Использование символа $ в формуле 3=+б$ не имеет смысла, и это является одной из причин, почему оно неверно с точки зрения математики. Та же проблема в «химической» формуле 2Zz: в таблице Менделеева нет элемента с обозначением Zz.

Второй тип синтаксических ошибок связан с неправильной структурой выражений, т.е. последовательностью следования символов. Выражение 3=+б$ имеет неверную структуру, т.к. сразу после знака равенства не может следовать знак сложения. Аналогично, в молекулярных формулах используются нижние индексы, но они не могут идти перед обозначением химического элемента.

17

Ревизия: 170

Базовые понятия

Хотя формальные и естественные языки имеют много общего, они имеют ряд важных отличий:

1. Однозначность

В естественных языках множество идиом и метафор; часто люди определяют значение фраз в зависимости от ситуации, в которой они используются. Формальные языки разработаны так, чтобы исключить неоднозначность выражений. Это означает, что выражение должно иметь только одно значение вне зависимости от контекста.

2. Избыточность

Для того чтобы избавиться от неоднозначности и избежать недопониманий в естественных языках используется избыточность: определения и дополнения. Формальные языки краткие и максимально выразительные.

Большинство людей, привыкших к естественным языкам, обычно с трудом привыкают к формальным языкам (и программам в том числе). Но стоит помнить, что плотность смысла в таких языках больше, поэтому они медленнее читаются и понимаются. В формальных языках очень важна структура, поэтому чтение справа налево или снизу вверх - не лучший способ их понять. И, наконец, мелочи важны. Маленькие орфографические и пунктуационные ошибки (и опечатки тоже), которые в естественных языках могут быть проигнорированы, в формальных языках будут иметь большое значение, вплоть до изменения смысла на противоположное.

В математике есть целый раздел, посвященный теории формальных языков. Именно на математическом аппарате этой теории основаны синтаксические анализаторы трансляторов.