Regexp parse type-3 грамматика - PullRequest
1 голос
/ 13 февраля 2012

Чтение Хомская иерархия ... ... Я знаю, что regexp не может анализировать грамматики типа 2 (контекстно-свободные грамматики), а также типы 1 и 0. Могут ли регулярные выражения анализировать / перехватывать ВСЕ грамматики типа 3 ( регулярные грамматики )?

1 Ответ

1 голос
/ 13 февраля 2012

Да, при условии, что они поддерживают чередование, конкатенацию и звезду Клини.Это относится к регулярным выражениям типа PCRE (Perl / Java / JavaScript / PHP / ...): чередование реализуется ((...)|(...)), конкатенация (...)(...), а звезда Клини - (...)*.(Есть несколько других деталей - в большинстве этих языков вам нужно использовать что-то вроде \A и \z для обозначения «начала строки» и «конца строки», что в обычной грамматикесамо собой разумеющееся - но это идея.)

Но не все, что называется "регулярным выражением" в контексте программирования, обязательно содержит все вышеперечисленное;например, Базовые регулярные выражения POSIX поддерживают только очень ограниченную форму чередования, где все "ветви" чередования состоят из одного символа (например, в то время как в PCRE есть и (a|b|c), и специальный случай)-эквивалентный [abc], POSIX BRE имеют только [abc], поэтому не может выразить что-то вроде (ab|c)).

...