В информатике, в области теории формального языка, часто используются различные строковые функции ; однако используемые обозначения отличаются от обозначений, используемых для компьютерного программирования, и некоторые часто используемые функции в теоретической области редко используются при программировании. В этой статье дается определение некоторых из этих основных терминов.
Строка - это конечная последовательность символов. Пустая строка обозначается. Конкатенация двух строк и обозначается или короче. Конкатенация с пустой строкой не имеет никакого значения:. Конкатенация строк является ассоциативной :.
Например,.
Язык является конечным или бесконечным множеством строк. Помимо обычных операций над множествами, таких как объединение, пересечение и т. Д., Конкатенация может применяться к языкам: если оба и являются языками, их конкатенация формально определяется как набор конкатенаций любой строки из и любой строки из. И снова точка конкатенации часто опускается для краткости.
Язык, состоящий только из пустой строки, следует отличать от пустого языка. Конкатенация любой язык с бывшим не делает каких - либо изменений:, в то время как конкатенация с последним всегда дает пустой язык:. Стечение языков ассоциативно.
Например, сокращая набор всех трехзначных десятичных чисел, получается как. Набор всех десятичных чисел произвольной длины является примером бесконечного языка.
Алфавит строки является набором всех символов, которые происходят в определенной последовательности. Если s - строка, ее алфавит обозначается как
Алфавит языка является множество всех символов, которые происходят в любой строке, формально:.
Например, набор представляет собой алфавит строки, а приведенный выше - алфавит указанного выше языка, а также языка всех десятичных чисел.
Пусть L - язык, а Σ - его алфавит. Строка подстановки или просто подмена отображение F, которая отображает символы Е на языках (возможно, в другом алфавите). Так, например, для символа a ∈ Σ имеем f ( a) = L a, где L a ⊆ ∆ * - некоторый язык с алфавитом ∆. Это отображение может быть расширено до строк как
для пустой строки ε и
для строки s ∈ L и символа a ∈ Σ. Подстановки строк могут быть распространены на целые языки как
Обычные языки закрываются при подстановке строк. То есть, если каждый символ в алфавите обычного языка заменяется другим обычным языком, результатом все равно будет обычный язык. Точно так же контекстно-свободные языки закрываются при подстановке строк.
Простым примером является преобразование f uc (.) В верхний регистр, которое может быть определено, например, следующим образом:
персонаж | сопоставлен с языком | замечание |
---|---|---|
Икс | f uc ( x) | |
lt; gt; | {lt; gt;} | сопоставить символ нижнего регистра с соответствующим символом верхнего регистра |
lt; gt; | {lt; gt;} | сопоставить заглавные буквы себе |
‹ Ss › | {‹ SS ›} | заглавные буквы отсутствуют, преобразовать в строку из двух символов |
‹0› | {ε} | сопоставить цифру с пустой строкой |
‹!› | {} | запретить пунктуацию, отобразить пустой язык |
... | аналогично для других символов |
Для расширения f uc на строки мы имеем, например,
Для расширения f uc на языки, например,
Струна гомоморфизм (часто называют просто как гомоморфизм в теории формальных языков ) является строкой замещения, так что каждый символ заменяется одной строкой. То есть, где - строка для каждого символа.
Струнные гомоморфизмы моноид морфизмов на свободном моноиде, сохраняющие пустую строку и бинарную операцию в конкатенации. С учетом языка, набор называется гомоморфное изображение из. Обратный гомоморфная строка определяются как
а обратный гомоморфный образ языка определяется как
В общем, пока есть
и
для любого языка.
Класс регулярных языков замкнут относительно гомоморфизмов и обратных гомоморфизмов. Точно так же контекстно-свободные языки замкнуты относительно гомоморфизмов и обратных гомоморфизмов.
Гомоморфизм строк называется ε-свободным (или e-свободным), если для всех a в алфавите. Простые однобуквенные шифры подстановки являются примерами (ε-свободных) гомоморфизмов строк.
Пример строкового гомоморфизма g uc также можно получить, задав аналогично приведенной выше замене: g uc (‹a›) = ‹A›,..., g uc (‹0›) = ε, но оставив g uc неопределенным. по знакам препинания. Примеры обратных гомоморфных образов:
Для последнего языка g uc ( g uc −1 ({‹A›, ‹bb›}) = g uc ({‹a›}) = {‹A›} ≠ {‹A›, ‹bb›}. Гомоморфизм g uc не является ε-свободным, поскольку он отображает eg ‹0› в ε.
Очень простой пример гомоморфизма строк, который отображает каждый символ только на символ, - это преобразование строки в кодировке EBCDIC в ASCII.
Если s это строка, и является алфавитом, то строка проекция из S является строкой, что результаты, удалив все символы, которые не являются в. Он записывается как. Формально это определяется удалением символов с правой стороны:
Здесь обозначает пустую строку. Проекция строки по сути такая же, как и проекция в реляционной алгебре.
Строковую проекцию можно превратить в проекцию языка. Для формального языка L его проекция дается формулой
Правый фактор символа а из строки s является усечение символа а в строке s, с правой стороны. Он обозначается как. Если строка не имеет на правой стороне, то результат будет пустая строка. Таким образом:
Можно взять частное от пустой строки:
Точно так же, учитывая подмножество моноида, можно определить фактор-подмножество как
Аналогично можно определить левые частные, при этом операции выполняются слева от строки.
Хопкрофт и Ульман (1979) определяют фактор L 1 / L 2 языков L 1 и L 2 по тому же алфавиту, как L 1 / L 2 = { s | ∃ t ∈ L 2. st ∈ L 1 }. Это не является обобщением приведенного выше определения, поскольку для строки s и различных символов a, b определение Хопкрофта и Уллмана подразумевает { sa } / { b }, дающее {}, а не {ε}.
Левое частное (определенное аналогично Хопкрофту и Ульману 1979) одноэлементного языка L 1 и произвольного языка L 2 известно как производная Бжозовского ; если L 2 представлен регулярным выражением, то может быть и левое частное.
Право частного подмножества моноида определяет отношение эквивалентности, называемое правое синтаксическое соотношением из S. Это дается
Очевидно, что отношение имеет конечный индекс (имеет конечное число классов эквивалентности) тогда и только тогда, когда правые частные семейства конечны; то есть, если
конечно. В случае, если M - моноид слов в некотором алфавите, тогда S будет регулярным языком, то есть языком, который может быть распознан конечным автоматом. Более подробно это обсуждается в статье о синтаксических моноидах.
Право отмены символа а из строки s является удаление первого вхождения символа а в строке s, начиная с правой стороны. Он обозначается как и рекурсивно определяется как
Пустая строка всегда может быть отменена:
Понятно, что правильная отмена и проецирование сменяют друг друга :
В префиксов строки есть множество всех префиксов в строке, в отношении данного языка:
где.
Закрытия префикс языка является
Пример:
Язык называется закрытым префиксом, если.
Оператор замыкания префикса идемпотентен :
Приставка отношение является бинарным отношением, например, что, если и только если. Это отношение является частным примером порядка префиксов.