In математика, информатика и лингвистика, формальный язык состоит из слов, буквы взяты из алфавит и правильно сформированный согласно определенному набору правил.
алфавит формального языка состоит из символов, букв или лексем, которые объединяются в строки языка. Каждая строка, составленная из символов этого алфавита, называется словом, а слова, принадлежащие определенному формальному языку, иногда называются правильно сформированными словами или правильно сформированными формулами. Формальный язык часто определяется с помощью формальной грамматики, например, регулярной грамматики или контекстно-свободной грамматики, которая состоит из правил ее формирования..
Область теории формального языка изучает в первую очередь чисто синтаксические аспекты таких языков, то есть их внутренние структурные паттерны. Теория формального языка возникла из лингвистики как способ понимания синтаксических закономерностей естественных языков. В информатике формальные языки используются, среди прочего, в качестве основы для определения грамматики языков программирования и формализованных версий подмножеств естественных языков, в которых слова языка представляют концепции, связанные с определенными значениями или семантика. В теории сложности вычислений, проблемы решения обычно определяются как формальные языки, а классы сложности определяются как наборы формальных языков, которые могут быть анализируется машинами с ограниченной вычислительной мощностью. В логике и основах математики формальные языки используются для представления синтаксиса аксиоматических систем, а математический формализм - это философия что вся математика может быть сведена таким образом к синтаксическому манипулированию формальными языками.
Считается, что первым формальным языком был тот, который использовал Готтлоб Фреге в его Begriffsschrift ( 1879), буквально означающее «концептуальное письмо», и который Фреге описал как «формальный язык чистой мысли».
Ранняя система полу-Туэ Акселя Туэ, которая может быть использована для переписывания строк оказал влияние на формальные грамматики.
алфавит в контексте формальных языков может быть любым установленным, хотя часто имеет смысл использовать алфавит в обычном смысле слово или, в более общем смысле, набор символов , например, ASCII или Unicode. Элементы алфавита называются его буквами . Алфавит может содержать бесконечное количество элементов; однако большинство определений в теории формального языка задают алфавиты с конечным числом элементов, и большинство результатов применимо только к ним.
A слово в алфавите может быть любой конечной последовательностью (т. Е. строкой ) букв. Множество всех слов в алфавите Σ обычно обозначается Σ (с использованием звезды Клини ). Длина слова - это количество букв, из которых оно состоит. Для любого алфавита существует только одно слово длины 0, пустое слово, которое часто обозначается буквами e, ε, λ или даже Λ. Посредством конкатенации можно объединить два слова, чтобы сформировать новое слово, длина которого является суммой длин исходных слов. Результатом соединения слова с пустым словом является исходное слово.
В некоторых приложениях, особенно в логике, алфавит также известен как словарь, а слова известны как формулы или предложения; это разрушает метафору буквы / слова и заменяет ее метафорой слова / предложения.
A формальный язык L над алфавитом Σ - это подмножество из Σ, то есть набор слов над этим алфавитом. Иногда наборы слов группируются в выражения, тогда как правила и ограничения могут быть сформулированы для создания «правильно сформированных выражений».
В информатике и математике, которые обычно не имеют дело с естественными языками, прилагательное «формальный» часто опускается как избыточное.
Хотя формальная теория языка обычно занимается формальными языками, которые описываются некоторыми синтаксическими правилами, фактическое определение понятия «формальный язык» такое же, как указано выше: (возможно, бесконечный) набор строк конечной длины составлен из заданного алфавита, не больше и не меньше. На практике существует множество языков, которые можно описать правилами, например, обычные языки или контекстно-свободные языки. Понятие формальной грамматики может быть ближе к интуитивному понятию «языка», описываемому синтаксическими правилами. Из-за злоупотребления определением конкретный формальный язык часто считается оснащенным формальной грамматикой, описывающей его.
Следующие правила описывают формальный язык L над алфавитом Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, = }:
Согласно этим правилам, строка " 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}. Вот несколько примеров формальных языков:
Формальные языки используются в качестве инструментов во многих дисциплинах. Однако формальная теория языка редко занимается конкретными языками (за исключением примеров), а в основном занимается изучением различных типов формализмов для описания языков. e, язык может быть задан как
Типичные вопросы, задаваемые о таких формализмах, включают:
Как ни странно, часто ответ на эти проблемы принятия решения таков: невозможно сделать вообще »или« это чрезвычайно дорого »(с указанием того, насколько дорого). Следовательно, формальная теория языка - это основная область применения теории вычислимости и теории сложности. Формальные языки могут быть классифицированы в иерархии Хомского на основании выразительной силы их порождающей грамматики, а также сложности их распознающего автомата. Контекстно-свободные грамматики и обычные грамматики обеспечивают хороший компромисс между выразительностью и простотой синтаксического анализа и широко используются в практических приложениях.
Некоторые операции с языками являются общими. Сюда входят стандартные операции над множеством, такие как объединение, пересечение и дополнение. Другой класс операций - это поэлементное применение строковых операций.
Примеры: предположим, что и - языки над некоторым общим алфавитом .
Такие строковые операции используются для исследования закрывающих свойств классов языков. Класс языков закрывается при определенной операции, когда операция, примененная к языкам в классе, всегда снова создает язык в том же классе. Например, контекстно-свободные языки, как известно, замкнуты при объединении, конкатенации и пересечении с регулярными языками, но не замкнуты при пересечении или дополнении. Теория трио и абстрактных семейств языков изучает наиболее общие свойства замыкания языковых семей сами по себе.
Операция | Обычная | DCFL | CFL | IND | CSL | рекурсивная | RE | |
---|---|---|---|---|---|---|---|---|
Объединение | Да | Нет | Да | Да | Да | Да | Да | |
Пересечение | Да | Нет | Нет | Нет | Да | Да | Да | |
Дополнение | Да | Да | Нет | Нет | Да | Да | Нет | |
Конкатенация | Да | Нет | Да | Да | Да | Да | Да | |
звезда Клини | Да | Нет | Да | Да | Да | Да | Да | |
(Строка) гомоморфизм | Да | Нет | Да | Да | Нет | Нет | Да | |
гомоморфизм без ε (строки) | Да | Нет | Да | Да | Да | Да | Да | |
Замена | Да | Нет | Да | Да | Да | Нет | Да | |
Обратный гомом. орфизм | Да | Да | Да | Да | Да | Да | Да | |
Обратный | Да | Нет | Да | Да | Да | Да | Да | |
Пересечение с обычным языком | Да | Да | Да | Да | Да | Да | Да |
Обычно компилятор состоит из двух отдельных компонентов. Лексический анализатор , иногда генерируемый с помощью такого инструмента, как lex
, идентифицирует токены грамматики языка программирования, например идентификаторы или ключевые слова, числовые и строковые литералы, знаки пунктуации и операторы, которые сами задаются более простым формальным языком, обычно с помощью регулярных выражений. На самом базовом концептуальном уровне парсер , иногда генерируемый генератором парсера , например yacc
, пытается определить, является ли исходная программа синтаксически действителен, то есть если он правильно сформирован по отношению к грамматике языка программирования, для которой был построен компилятор.
Конечно, компиляторы не просто анализируют исходный код - они обычно переводят его в какой-то исполняемый формат. Из-за этого синтаксический анализатор обычно выводит больше, чем ответ «да / нет», обычно абстрактное синтаксическое дерево. Это используется последующими этапами компилятора для создания в конечном итоге исполняемого файла, содержащего машинный код, который запускается непосредственно на оборудовании, или некоторого промежуточного кода, который требует виртуальная машина для выполнения.
В математической логике формальная теория - это набор предложений выраженных на формальном языке.
Формальная система (также называемая логическим исчислением или логической системой) состоит из формального языка вместе с дедуктивным аппаратом (также называемым дедуктивной системой). Дедуктивный аппарат может состоять из набора правил преобразования, которые могут интерпретироваться как действительные правила вывода, или набора аксиом, или иметь и то, и другое. Формальная система используется для получения одного выражения из одного или нескольких других выражений. Хотя формальный язык можно отождествить с его формулами, формальную систему нельзя также отождествить с его теоремами. Две формальные системы и могут иметь все теоремы одни и те же, но различаются некоторым существенным теоретико-доказательственным образом (формула A может быть синтаксическим следствием формулы B в одной, но не в другой, например).
Формальное доказательство или вывод - это конечная последовательность правильно сформированных формул (которые могут интерпретироваться как предложения или предложения ), каждая из которых является аксиомой или следует из предыдущих формул в последовательность по правилу вывода . Последнее предложение в последовательности - это теорема формальной системы. Формальные доказательства полезны, потому что их теоремы можно интерпретировать как истинные утверждения.
Формальные языки полностью синтаксичны по своей природе, но могут иметь семантику, которая придает значение элементам языка. Например, в математической логике набор возможных формул определенной логики является формальным языком, а интерпретация придает значение каждой из формул - обычно значение истинности.
Изучение интерпретаций формальных языков называется формальной семантикой. В математической логике это часто делается в терминах теории моделей. В теории моделей термины, встречающиеся в формуле, интерпретируются как объекты в пределах математических структур, и фиксированные композиционные правила интерпретации определяют, как значение истинности формулы может быть получено из интерпретации ее терминов; Модель формулы - это интерпретация терминов, при которой формула становится истинной.
На Викискладе есть средства массовой информации, связанные с Формальные языки. |