Производная Бжозовского
В теоретической информатике , в частности в теории формального языка , производная Бжозовского из набора из струн и веревки — это набор всех строк, которые можно получить из строки в отрезав префикс . Формально:
- .
Например,
Производное Бжозовского было введено под разными названиями с конца 1950-х годов. [1] [2] [3] Сегодня он назван в честь ученого-компьютерщика Януша Бжозовского , который исследовал его свойства и предложил алгоритм вычисления производной обобщенного регулярного выражения . [4]
Определение
[ редактировать ]Хотя изначально это определение изучалось для регулярных выражений, оно применимо к произвольным формальным языкам.Учитывая любой формальный язык над алфавитом и любая строка , производная от относительно определяется как: [5]
Производная Бжозовского — это частный случай левого фактора по одноэлементному множеству, содержащему только : .
Эквивалентно для всех :
Из определения для всех :
поскольку для всех , у нас есть .
Производная по произвольной строке сводится к последовательным производным по символам этой строки, поскольку для всех :
Язык называется обнуляемым тогда и только тогда, когда он содержит пустую строку . Каждый язык однозначно определяется обнуляемостью его производных:
Язык можно рассматривать как (потенциально бесконечное) дерево с булевой меткой (см. также дерево (теория множеств) и автомат с бесконечным деревом ). Каждая возможная строка обозначает узел в дереве с меткой true, когда и ложь в противном случае. В этой интерпретации производная по символу соответствует поддереву, полученному путем следования по ребру от корня. Разложение дерева на корень и поддеревья. соответствует следующему равенству, справедливому для любого языка :
Производные обобщенных регулярных выражений
[ редактировать ]Когда язык задается регулярным выражением, концепция производных приводит к алгоритму определения того, принадлежит ли данное слово регулярному выражению.
Учитывая конечный алфавит A символов, [6] обобщенное регулярное выражение R обозначает возможно бесконечное множество строк конечной длины в алфавите A , называемом языком R и обозначаемом L ( R ).
Обобщенным регулярным выражением может быть одно из следующих (где a — символ алфавита A , а R и S — обобщенные регулярные выражения):
- «∅» обозначает пустое множество: L (∅) = {},
- «ε» обозначает одноэлементный набор, содержащий пустую строку: L (ε) = {ε},
- " a " обозначает одноэлементный набор, содержащий односимвольную строку a : L ( a ) = { a },
- « R ∨ S » обозначает объединение R и S : L ( R ∨ S ) = L ( R ) ∪ L ( S ),
- « R ∧ S » обозначает пересечение R и S : L ( R ∧ S ) = L ( R ) ∩ L ( S ),
- «¬ R » обозначает дополнение R (относительно A *, множества всех строк над A ): L (¬ R ) = A * \ L ( R ),
- « RS » обозначает объединение R и S : L ( RS ) = L ( R ) · L ( S ),
- « R *» обозначает замыкание Клини : R L ( R * ) = L ( R )*.
В обычном регулярном выражении ни ∧, ни ¬ не допускаются.
Вычисление
[ редактировать ]Для любого данного обобщенного регулярного выражения R и любой строки u производная u −1 R снова является обобщенным регулярным выражением (обозначающим язык u −1 Л ( Р )). [7] Его можно вычислить рекурсивно следующим образом. [8]
( делать ) −1 Р | = а −1 ( в −1 Р ) | для символа a и строки u |
е −1 Р | = Р |
Используя предыдущие два правила, производная по произвольной строке объясняется производной по односимвольной строке a .Последний можно вычислить следующим образом: [9]
а −1 а | = е | |
а −1 б | = ∅ | для каждого символа b ≠ a |
а −1 е | = ∅ | |
а −1 ∅ | = ∅ | |
а −1 ( Р *) | = ( а −1 Р ) Р * | |
а −1 ( РС ) | = ( а −1 р ) S ∨ ν( р ) а −1 С | |
а −1 ( R ∧ S ) | = ( а −1 р ) ∧ ( а −1 С ) | |
а −1 ( R ∨ S ) | = ( а −1 р ) ∨ ( а −1 С ) | |
а −1 (¬ R ) | = ¬( а −1 Р ) |
Здесь ν( R ) — вспомогательная функция, дающая обобщенное регулярное выражение, которое возвращает пустую строку ε, если ε язык R содержит , и в противном случае возвращает ∅. Эту функцию можно вычислить по следующим правилам: [10]
п( а ) | = ∅ | для любого символа а |
п( е ) | = е | |
п(∅) | = ∅ | |
п( Р *) | = е | |
ν( РС ) | знак равно ν( р ) ∧ ν( S ) | |
ν( р ∧ S ) | знак равно ν( р ) ∧ ν( S ) | |
ν( р ∨ S ) | знак равно ν( р ) ∨ ν( S ) | |
п(¬ Р ) | = е | если ν( R ) = ∅ |
п(¬ Р ) | = ∅ | если ν( R ) = е |
Характеристики
[ редактировать ]Строка u является членом набора строк, обозначаемого обобщенным регулярным выражением R, тогда и только тогда, когда ε является членом набора строк, обозначаемого производной u. −1 Р. [11]
Учитывая все производные фиксированного обобщенного регулярного выражения, R дает лишь конечное число различных языков. Если их количество обозначить d R , все эти языки можно получить как производные от R по строкам длины меньше d R . [12] Более того, существует полный детерминированный конечный автомат с d R состояниями, который распознает регулярный язык, заданный R , как утверждается в теореме Майхилла-Нерода .
Производные контекстно-свободных языков
[ редактировать ]Производные также эффективно вычислимы для рекурсивно определенных уравнений с операторами регулярных выражений, которые эквивалентны контекстно-свободным грамматикам . Это понимание было использовано для разработки алгоритмов синтаксического анализа для контекстно-свободных языков . [13] Было показано, что реализация таких алгоритмов имеет кубическую временную сложность , [14] соответствует сложности синтаксического анализатора Эрли для общих контекстно-свободных грамматик.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Джордж Н. Рэйни (апрель 1958 г.). «Последовательные функции» . Журнал АКМ . 5 (2): 177–180. дои : 10.1145/320924.320930 . S2CID 1611992 .
- ^ Дана Скотт и Майкл Рабин (апрель 1959 г.). «Конечные автоматы и проблемы их решения» (PDF) . Журнал исследований и разработок IBM . 3 (2): 114–125. дои : 10.1147/рд.32.0114 .
- ^ Си Си Элгот и Джей Ди Ратледж (октябрь 1961 г.). «Операции над конечными автоматами». В Роберте С. Ледли (ред.). Учеб. AIEE 2-я годовщина. Симп. по коммутации, теории цепей и логическому проектированию (SWCT), Детройт . стр. 129–132. дои : 10.1109/FOCS.1961.26 .
- ^ Януш А. Бжозовский (1964). «Производные регулярных выражений» . Дж АСМ . 11 (4): 481–494. дои : 10.1145/321239.321249 . S2CID 14126942 .
- ^ Януш А. Бжозовский (1964). «Производные регулярных выражений» . Дж АСМ . 11 (4): 481–494. дои : 10.1145/321239.321249 . S2CID 14126942 .
- ^ Бжозовский (1964), стр. 481, требовал, чтобы A состояло из 2 н комбинации из n битов для некоторого n .
- ^ Бжозовский (1964), стр.483, Теорема 4.1.
- ^ Бжозовский (1964), стр.483, Теорема 3.2.
- ^ Бжозовский (1964), стр.483, Теорема 3.1.
- ^ Бжозовский (1964), стр.482, Определение 3.2.
- ^ Бжозовский (1964), стр.483, Теорема 4.2.
- ^ Бжозовский (1964), стр.484, Теорема 4.3.
- ^ Мэтью Мэйт; Дэвид Дарайс; Дэниел Спивак (2011). Разбор с производными: функциональный перл . Материалы 16-й международной конференции ACM SIGPLAN по функциональному программированию (ICFP). стр. 189–195. дои : 10.1145/2034773.2034801 .
- ^ Майкл Д. Адамс; Селеста Холленбек; Мэтью Мэйт (2016). «О сложности и производительности синтаксического анализа с производными». Материалы 37-й конференции ACM SIGPLAN по проектированию и реализации языков программирования . Материалы 37-й конференции ACM SIGPLAN по разработке и реализации языков программирования (PLDI). стр. 224–236. arXiv : 1604.04695 . дои : 10.1145/2908080.2908128 . ISBN 9781450342612 .