32
правки
Изменения
Правки
Рассмотрим следующую КС-грамматику:
<tex>S\rightarrow A\\A\rightarrow BC\varepsilon\\A\rightarrow CD</tex> Очевидно, что эквивалентным будет выражение <tex>((?1)BA\,(?2)\,|B\,(?2)rightarrow b\,(?3))\,</tex>, где группы <tex>1, 2, 3</tex> соответствуют <tex>B, C, D\rightarrow c</tex>.
Очевидно, что эквивалентным будет выражение <tex>(((b\,|\,c)\,(?1)?)?).</tex>
Другой пример:
<tex>S\rightarrow AAB\\AS\rightarrow\varepsilon\\A\rightarrow BASS\\B\rightarrow bCD\\BC\rightarrow c\\D\rightarrow d</tex>
Регулярное выражение для этой грамматики будет выглядеть так: <tex>(((b?1?1cd)\,|\,c)\,(?1)?)?varepsilon).</tex>
==Применение==
С помощью обратных ссылок можно составить регулярные выражения для языка тандемных повторов и других языков, где требуется «запоминать» части входящих в язык слов.