stringtranslate.com

Операции со строками

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

Строки и языки

Строка — это конечная последовательность символов. Пустая строка обозначается как . Конкатенация двух строк и обозначается как , или короче как . Конкатенация с пустой строкой не имеет значения: . Конкатенация строк ассоциативна : .

Например, .

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

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

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

Алфавит строки

Алфавит строки — это набор всех символов, которые встречаются в определенной строке. Если s — строка, ее алфавит обозначается как

Алфавит языка — это набор всех символов, которые встречаются в любой строке , формально: .

Например, множество — это алфавит строки , а указанное выше — это алфавит указанного выше языка, а также языка всех десятичных чисел.

Замена строки

Пусть L — язык , а Σ — его алфавит. Подстановка строк или просто подстановка — это отображение f , которое отображает символы из Σ в языки (возможно, в другом алфавите). Таким образом, например, для символа a ∈ Σ имеем f ( a )= L a , где L a ⊆ Δ * — некоторый язык, алфавит которого — Δ. Это отображение можно расширить до строк следующим образом:

f (ε)=ε

для пустой строки ε, и

f ( sa )= f ( s ) f ( a )

для строки sL и символа a ∈ Σ. Подстановки строк могут быть расширены на целые языки как [1]

Регулярные языки закрыты относительно замены строк. То есть, если каждый символ в алфавите регулярного языка заменить другим регулярным языком, результатом все равно будет регулярный язык. [2] Аналогично, контекстно-свободные языки закрыты относительно замены строк. [3] [примечание 1]

Простым примером является преобразование f uc (.) в верхний регистр, которое можно определить, например, следующим образом:

Для расширения f uc на строки мы имеем, например,

Для расширения f uc на языки мы имеем, например,

Гомоморфизм строк

Гомоморфизм строк ( часто называемый просто гомоморфизмом в формальной теории языка ) — это подстановка строк, при которой каждый символ заменяется одной строкой. То есть, , где — строка, для каждого символа . [примечание 2] [4]

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

в то время как обратный гомоморфный образ языка определяется как

В общем, в то время как у кого-то есть

и

для любого языка .

Класс регулярных языков замкнут относительно гомоморфизмов и обратных гомоморфизмов. [5] Аналогично, контекстно-свободные языки замкнуты относительно гомоморфизмов [примечание 3] и обратных гомоморфизмов. [6]

Гомоморфизм строк называется ε-свободным (или 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 не является ε-свободным, поскольку он отображает, например, ‹0› в ε.

Очень простой пример гомоморфизма строк, который сопоставляет каждый символ просто с символом, — это преобразование строки в кодировке EBCDIC в ASCII .

Проекция струны

Если s — строка, а — алфавит, строковая проекция s это строка, которая получается путем удаления всех символов, отсутствующих в . Она записывается как . Формально она определяется путем удаления символов с правой стороны:

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

Проекция строки может быть повышена до проекции языка . Если задан формальный язык L , его проекция задается как

[ необходима ссылка ]

Правое и левое частное

Правое частное символа a из строки s — это усечение символа a в строке s с правой стороны. Оно обозначается как . Если строка не имеет a с правой стороны, результатом будет пустая строка. Таким образом:

Частное от пустой строки можно взять:

Аналогично, если задано подмножество моноида , можно определить фактор-подмножество как

Аналогичным образом можно определить левые частные , при этом операции выполняются слева от строки. [ необходима ссылка ]

Хопкрофт и Ульман (1979) определяют частное L 1 / L 2 языков L 1 и L 2 по одному и тому же алфавиту как L 1 / L 2 = { s | ∃ tL 2 . stL 1 } . [7] Это не обобщение приведенного выше определения, поскольку для строки s и различных символов a , b определение Хопкрофта и Ульмана подразумеваетчто дает {}, а не { ε }.

Левое частное (определенное аналогично Хопкрофту и Ульману 1979) одноэлементного языка L 1 и произвольного языка L 2 известно как производная Бжозовского ; если L 2 представлен регулярным выражением , то таким же может быть и левое частное. [8]

Синтаксическое отношение

Правое частное подмножества моноида определяет отношение эквивалентности , называемое правым синтаксическим отношением S. Оно задается как

Отношение, очевидно, имеет конечный индекс (имеет конечное число классов эквивалентности) тогда и только тогда, когда семейство правых частных конечно, то есть, если

конечен. В случае, если M — моноид слов над некоторым алфавитом, Sрегулярный язык , то есть язык, который может быть распознан конечным автоматом . Это более подробно обсуждается в статье о синтаксических моноидах . [ требуется ссылка ]

Право отмены

Правое удаление символа a из строки s — это удаление первого вхождения символа a в строку s , начиная с правой стороны. Оно обозначается как и рекурсивно определяется как

Пустую строку всегда можно отменить:

Очевидно, что правильное аннулирование и проекция коммутируют :

[ необходима ссылка ]

Префиксы

Префиксы строки — это набор всех префиксов строки относительно данного языка:

где .

Префиксное закрытие языка — это

Пример:

Язык называется префиксно закрытым, если .

Оператор замыкания префикса является идемпотентным :

Префиксное отношение является бинарным отношением, таким, что тогда и только тогда, когда . Это отношение является частным примером префиксного порядка . [ требуется ссылка ]

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

Примечания

  1. ^ Хотя каждый регулярный язык также является контекстно-свободным, предыдущая теорема не следует из текущей, поскольку первая дает более точный результат для регулярных языков.
  2. ^ Строго формально гомоморфизм даёт язык, состоящий всего из одной строки, т.е. .
  3. ^ Это следует из вышеупомянутого замыкания при произвольных подстановках.

Ссылки

  1. ^ Хопкрофт, Ульман (1979), Раздел 3.2, стр. 60
  2. ^ Хопкрофт, Ульман (1979), Раздел 3.2, Теорема 3.4, стр.60
  3. ^ Хопкрофт, Ульман (1979), Раздел 6.2, Теорема 6.2, стр.131
  4. ^ Хопкрофт, Ульман (1979), Раздел 3.2, стр. 60-61
  5. ^ Хопкрофт, Ульман (1979), Раздел 3.2, Теорема 3.5, стр.61
  6. ^ Хопкрофт, Ульман (1979), Раздел 6.2, Теорема 6.3, стр.132
  7. ^ Хопкрофт, Ульман (1979), Раздел 3.2, стр. 62
  8. ^ Януш А. Бжозовский (1964). «Производные регулярных выражений». Дж АСМ . 11 (4): 481–494. дои : 10.1145/321239.321249 . S2CID  14126942.