Формальный язык - Formal language

Структура синтаксически правильного, хотя и бессмысленного, английского предложения, «Бесцветные зеленые идеи яростно спят» (исторический пример из Хомский 1957).

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

В алфавит формального языка состоят из символов, букв или лексем, которые объединяются в строки языка.[1] Каждая строка, составленная из символов этого алфавита, называется словом, а слова, принадлежащие определенному формальному языку, иногда называются правильные слова или же правильные формулы. Формальный язык часто определяется с помощью формальная грамматика например, регулярная грамматика или же контекстно-свободная грамматика, который состоит из правила формирования.

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

История

Считается, что первый формальный язык используется Готтлоб Фреге в его Begriffsschrift (1879), что буквально означает «написание понятий», и который Фреге описал как «формальный язык чистого мышления».[2]

Аксель Туэ рано система полутхуэ, который можно использовать для перезаписи строк, оказал влияние на формальные грамматики.

Слова над алфавитом

An алфавитв контексте формальных языков может быть любым набор, хотя часто имеет смысл использовать алфавит в обычном смысле этого слова, или в более общем смысле набор символов Такие как ASCII или же Unicode. Элементы алфавита называются его буквы. Алфавит может содержать бесконечный количество элементов;[примечание 1] однако большинство определений в теории формального языка задают алфавиты с конечным числом элементов, и большинство результатов применимо только к ним.

А слово над алфавитом может быть любая конечная последовательность (т. е. нить ) букв. Множество всех слов в алфавите Σ обычно обозначают через Σ* (с использованием Клини звезда ). Длина слова - это количество букв, из которых оно состоит. Для любого алфавита существует только одно слово длины 0, пустое слово, который часто обозначается e, ε, λ или даже Λ. К конкатенация можно объединить два слова, чтобы образовать новое слово, длина которого равна сумме длин исходных слов. Результатом соединения слова с пустым словом является исходное слово.

В некоторых приложениях, особенно в логика, алфавит также известен как словарный запас и слова известны как формулы или же фразы; это разрушает метафору буквы / слова и заменяет ее метафорой слова / предложения.

Определение

А формальный язык L над алфавитом Σ является подмножество из Σ*, то есть набор слова над этим алфавитом. Иногда наборы слов группируются в выражения, тогда как правила и ограничения могут быть сформулированы для создания «правильно сформированных выражений».

В информатике и математике, которыми обычно не занимаются естественные языки прилагательное "формальный" часто опускается как лишнее.

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

Примеры

Следующие правила описывают формальный языкL над алфавитом Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, =}:

  • Каждая непустая строка, не содержащая «+» или «=» и не начинающаяся с «0», находится вL.
  • Строка "0" находится вL.
  • Строка, содержащая "=", находится вL тогда и только тогда, когда есть ровно один знак "=", и он разделяет две допустимые строкиL.
  • Строка, содержащая "+", но не "=", находится вL тогда и только тогда, когда каждый знак "+" в строке разделяет две допустимые строкиL.
  • Нет строки вL кроме тех, которые предусмотрены предыдущими правилами.

По этим правилам строка «23 + 4 = 555» находится вL, но строка «= 234 = +» - нет. Этот формальный язык выражает натуральные числа, правильно сформированные сложения и правильно сформированные равенства сложения, но он выражает только то, как они выглядят (их синтаксис ), а не то, что они означают (семантика ). Например, нигде в этих правилах нет указания, что «0» означает число ноль, «+» означает сложение, «23 + 4 = 555» неверно и т. Д.

Конструкции

Для конечных языков можно явно перечислить все правильно сформированные слова. Например, мы можем описать языкL как просто L = {a, b, ab, cba}. В выродиться случай этой конструкции - пустой язык, в котором вообще нет слов (L = ).

Однако даже в конечном (непустом) алфавите, таком как Σ = {a, b}, существует бесконечное количество слов конечной длины, которые потенциально могут быть выражены: «a», «abb», «ababba», » aaababbbbaab ", .... Следовательно, формальные языки обычно бесконечны, и описать бесконечный формальный язык не так просто, как написать L = {a, b, ab, cba}. Вот несколько примеров формальных языков:

  • L = Σ*, набор все слова над Σ;
  • L = {а}* = {aп}, куда п пробегает натуральные числа и "aп"означает" повторяется " п раз (это набор слов, состоящий только из символа «а»);
  • набор синтаксически правильных программ на данном языке программирования (синтаксис которых обычно определяется контекстно-свободная грамматика );
  • набор входов, на которых определенная Машина Тьюринга остановки; или же
  • набор максимальных строк буквенно-цифровой ASCII символы в этой строке, т.е.
    набор {набор, максимальный, строки, буквенно-цифровые, ASCII, символы, на, этой, строке, i, e}.

Формализмы спецификации языка

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

Типичные вопросы, которые задают о таких формализмах, включают:

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

Удивительно часто, но ответ на эти проблемы с принятием решения - «это невозможно сделать вообще» или «это чрезвычайно дорого» (с указанием того, насколько дорого). Таким образом, теория формального языка является основной областью применения теория вычислимости и теория сложности. Формальные языки могут быть отнесены к Иерархия Хомского основанные на выразительной силе их порождающей грамматики, а также на сложности их распознавания автомат. Бесконтекстные грамматики и регулярные грамматики обеспечивают хороший компромисс между выразительностью и простотой разбор, и широко используются в практических приложениях.

Операции с языками

Некоторые операции с языками являются общими. Сюда входят стандартные операции над множеством, такие как объединение, пересечение и дополнение. Другой класс операций - это поэлементное применение строковых операций.

Примеры: предположим и это языки над некоторым общим алфавитом .

  • В конкатенация состоит из всех строк вида куда это строка из и это строка из .
  • В пересечение из и состоит из всех строк, содержащихся на обоих языках
  • В дополнять из относительно состоит из всех строк что не в .
  • В Клини звезда: язык, состоящий из всех слов, которые представляют собой конкатенацию нуля или более слов в исходном языке;
  • Разворот:
    • Позволять ε быть пустым словом, тогда , и
    • за каждое непустое слово (куда элементы некоторого алфавита), пусть ,
    • затем для формального языка , .
  • Гомоморфизм струн

Такой строковые операции используются для расследования закрывающие свойства классов языков. Класс языков закрывается при определенной операции, когда операция, применяемая к языкам в классе, всегда снова создает язык в том же классе. Например, контекстно-свободные языки известны как замкнутые относительно объединения, конкатенации и пересечения с обычные языки, но не закрывается при пересечении или дополнении. Теория трио и абстрактные семейства языков исследует наиболее общие свойства замыкания языковых семей как таковых.[3]

Замыкающие свойства языковых семейств ( Op где оба и принадлежат к языковой семье, указанной в столбце). После Хопкрофта и Ульмана.
ОперацияОбычныйDCFLCFLINDCSLрекурсивныйRE
СоюздаНетдадададада
ПересечениедаНетНетНетдадада
ДополнениедадаНетНетдадаНет
КонкатенациядаНетдадададада
Клини звездадаНетдадададада
(Строка) гомоморфизм даНетдадаНетНетда
ε-свободный (струнный) гомоморфизм даНетдадададада
Замена даНетдададаНетда
Обратный гомоморфизм дадададададада
Обеспечить регрессдаНетдадададада
Пересечение с обычный язык дадададададада

Приложения

Языки программирования

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

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

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

Эта диаграмма показывает синтаксический подразделения в формальная система. Строки символов можно в общих чертах разделить на ерунду и правильные формулы. Набор правильно построенных формул делится на теоремы и нетеоремы.

В математическая логика, а формальная теория это набор фразы выражается формальным языком.

А формальная система (также называемый логическое исчисление, или логическая система) состоит из формального языка вместе с дедуктивный аппарат (также называемый дедуктивная система). Дедуктивный аппарат может состоять из набора правила трансформации, которые можно интерпретировать как действительные правила вывода или как набор аксиомы или и то, и другое. Формальная система используется для выводить одно выражение из одного или нескольких других выражений. Хотя формальный язык можно отождествить с его формулами, формальную систему нельзя также отождествить с его теоремами. Две формальные системы и могут иметь все те же теоремы и все же различаться в некотором значительном теоретико-доказательном отношении (формула A может быть синтаксическим следствием формулы B в одной, но не в другой, например).

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

Интерпретации и модели

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

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

Смотрите также

Примечания

  1. ^ Например, логика первого порядка часто выражается с помощью алфавита, который, помимо таких символов, как, ¬, ∀ и скобок, содержит бесконечно много элементов Икс0Икс1Икс2,… Которые играют роль переменных.

Рекомендации

Цитаты

  1. ^ См. Например Регицци, Стефано Креспи (2009), Формальные языки и компиляция, Тексты по информатике, Springer, стр. 8, ISBN  9781848820500, Алфавит - это конечное множество.
  2. ^ Мартин Дэвис (1995). «Влияние математической логики на информатику». В Рольф Херкен (ред.). Универсальная машина Тьюринга: обзор за полвека. Springer. п. 290. ISBN  978-3-211-82637-9.
  3. ^ Хопкрофт и Ульман (1979), Глава 11: Замыкающие свойства семейств языков.

Источники

Процитированные работы
Общие ссылки

внешняя ссылка