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

Естественные языки являются языками, на которых говорят люди, такие как английский, испанский, и французский языки. Они не были разработаны людьми (хотя люди пытаются навязать какие-то правила для них); они развивались естественным путем.

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

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

Формальные языки, как правило, имеют строгие правила синтаксиса. Например, 3+3=6 является синтаксически правильным математическим утверждением, но 3=+$6 - нет. H2O является синтаксически правильным химическим названием, но 2ZZ - нет.

Правила синтаксиса бывают двух видов: относящихся к лексемам и структуре. Лексемы являются основными элементами языка, такими как слова, цифры и химические элементы. Одна из проблем, с 3 = + 6 $ в том, что $ не является юридической лексемой в математике (по крайней мере, насколько мы знаем). Аналогичным образом, 2Zz не является законным, потому что нет ни одного элемента с аббревиатурой Zz.

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

В качестве упражнения создайте то, что выглядит хорошо структурированным английским предложением с неузнаваемыми лексемами в нем. Затем напишите еще одно предложение со всеми действующими лексемами, но с недопустимой структурой.

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

Например, когда вы слышите фразу «Второй ботинок упал», вы понимаете, что «второй ботинок» является предметом, а «упал» - предикатом. После того как вы разобрали предложение, вы можете выяснить его значение либо его семантику. Предполагая, что вы знаете, что такое «ботинок» и что это значит падать, вы будете понимать общий подтекст этого предложения.

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

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

избыточность - Для компенсации двусмысленности и уменьшения недопонимания естественные языки используют много избыточности. В результате они часто многословны. Формальные языки являются менее избыточными и более краткими.

буквальность - естественные языки полны идиом и метафор. Если я говорю: «Второй ботинок упал» там, вероятно, нет никакой обуви и нечему падать. Формальные языки означают именно то, что они говорят.

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

Поэзия

— слова используются для их впечатления, а также для их смысла, и все стихотворение вместе создает эффект или эмоциональный отклик. Неоднозначность не только общепринята, но часто является преднамеренной.

Проза

— буквальное значение слова является более важным, а структура способствует большему пониманию. Проза более поддается анализу, чем поэзия, но до сих пор часто неоднозначна.

Программы

— значение компьютерной программы однозначно и буквально, и может быть осознано полностью посредством анализа лексем и структуры.

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

Первая программа

Традиционно первая программа, которую пишут на новом языке, называется «Hello, World!», потому что всё, что она делает - это отображает слова «Hello, World!». В Python, это выглядит следующим образом:

print «Hello, World!»

Это пример оператора печати, который на самом деле не печатает ничего на бумаге. Он отображает значение на экране. В этом случае результатом являются слова:

Hello, World!

Кавычки в программе отмечают начало и конец значения; они не появляются в результате.

Некоторые люди судят о качестве языка программирования по простоте программы «Hello, World!». По этому образцу, Python делает это настолько, насколько это возможно.

Глоссарий.

Решение проблемы - процесс разработки проблемы, нахождение решения и отражение решения.

Язык программирования высокого уровня - язык программирования, подобный Python, который задуман быть легким для людей, чтобы читать и писать.

Низкоуровневый язык - язык программирования, который разработан, чтобы быть естественным для выполнения компьютером; также называемый «машинным языком» или «языком ассемблера».

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

Компиляция - одноразовый перевод программы, написанной на языке высокого уровня, на язык низкого уровня в рамках подготовки для последующего выполнения.

Исходный код - программа на языке высокого уровня перед ее компиляцией. объектный код - вывод компилятора после того, как он перевел программу. выполняемый код - другое имя для «объектного кода», который готов к выполнению. сценарий - программа, хранимая в файле (как правило та, которая будет интерпретироваться).

Программа - набор инструкций, который определяет вычисления. алгоритм - общий процесс решения класса проблем.

Баг - ошибка в программе. отладка - процесс поиска и удаления любой из трех типов ошибок программирования.

Синтаксис - структуры программы. синтаксическая ошибка - ошибка в программе, которая делает невозможным анализ (и, следовательно, невозможность интерпретации).

Ошибка выполнения - ошибка, которая не встречается, пока программа не начнет выполняться, но которая предотвращает продолжение программы.

Исключение - другое название ошибки выполнения. семантическая ошибка - ошибка в программе, которая заставляет ее делать что-то другое, чем то, что подразумевалось программистом.

Семантика - смысл программы. естественный язык - любой из языков, на котором говорят люди и которые развивались естественным образом.

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

Лексема - один из основных элементов синтаксической структуры программы, аналогичный слову на естественном языке.

Синтаксический анализ - изучение программы и анализ синтаксической структуры.

Оператор печати - инструкция, которая вызывает интерпретатор Python для отображения значения на экране.