Позвольте мне сначала задать ваш вопрос. Хорошим примером неформального языка являются естественные языки. Примеры на английском и словенском языках. Тагалог и Тарифит бербер. К сожалению, лингвисты, похоже, не имеют определения естественного языка, о котором все согласятся.
Noam Chomsky классно пытался смоделировать естественный язык, используя контекстно-свободные гаммары в своей бумаге 1956 года Three Models for the Description of Language. Он изобрел (или обнаружил, если хотите) их в этой статье; хотя он не называл их так; в то время как они не были полезны для моделирования английского языка, они революционизировали информатику.
Формально официальный язык представляет собой всего лишь набор строк над конечным алфавитом. Вот и все.
Примеры включают все действующие программы на языке C, все допустимые файлы HTML, все допустимые файлы XML, все строки «сбалансированных» круглых скобок (например, (),()(), ((()))()(()), ...
), набор (коды под некоторым кодированием) всех детерминированных машин Тьюринга, которые всегда останавливаются, набор всех простых графиков, которые могут быть окрашены в k
-colors (на самом деле их коды при некотором кодировании), набор всех двоичных строк, которые заканчиваются и начинаются с 1
и т. д.
Некоторые из них легко распознаются с использованием регулярного выражения (или, что эквивалентно, DFA); некоторые из них невозможно распознать с использованием DFA, но могут быть распознаны с помощью PDA (или, что то же самое, можно описать с помощью контекстно-свободной грамматики); другие не допускают такого описания, но могут быть распознаны машиной Тьюринга; некоторые из них не распознаются даже машиной Тьюринга (называемой бескомпромиссной).
Именно поэтому определение так полезно. Многие вещи, с которыми мы сталкиваемся в CS evey day, можно отнести к формальным языкам.
Для хорошего ознакомления с предметом, я настоятельно рекомендую превосходную книгу Введение в теорию автоматов, языки и вычисления by Hopcroft et al.
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что речь идет не о программировании в рамках применения этого термина здесь на SO. –
@HighPerformanceMark, это очень плохо, потому что, по моему мнению, в последнее время в SO существует большой недостаток интересных вопросов. –