Чи може POSIX BRE виражати всі звичайні мови?


13

Здається, що "Основні регулярні вирази", визначені POSIX.1-2008 , не підтримують чергування a|b(хоча деякі греп-реалізації розпізнають уникнуту версію, \|).

Оскільки звичайні мови за визначенням закриті союзом, чи означає це, що POSIX BRE має меншу виражальну силу, ніж кінцевий автомат? Або є якийсь спосіб імітувати чергування за допомогою інших конструкцій?

Відповіді:


17

Дійсно, мова POSIX BRE не може виражати всі регулярні вирази, оскільки їй не вистачає чергування. Він навіть не може розпізнати всі кінцеві мови, не кажучи вже про всі звичайні мови.

Наприклад, не розпізнається як BRE. Щоб підтвердити це, подумайте, якою може бути синтаксична форма вершини:{ab,ba}

  • Це не може бути однією з однозначних форм, оскільки мова має слова довжиною .>1
  • Це не може бути оскільки це буде відповідати порожній рядку.R
  • Це не може бути за винятком m = n = 1 (у цьому випадку ми повертаємося до початкової проблеми), оскільки це відповідатиме рядкам різної довжини або порожньому рядку.R{m,n}m=n=1
  • Отже, це має бути конкатенація: . Тепер розглянемо , як б зізнається: R1R2ab
    • Якщо розпізнає в Ь , то R 2 не повинні визнавати що - або що - небудь інше , ніж порожній рядок. Отже, R 1 повинен розпізнати { a b , b a } і ми повернемося до початкової проблеми.R1abR2R1{ab,ba}
    • Якщо розпізнає a, але не a b, то R 2 повинен розпізнавати b . Але тоді R 1 R 2 розпізнає всі слова форми u b, де R 1 розпізнає u , тому R 1 не повинен розпізнавати нічого, крім a . Немає способу розпізнати b a .R1aabR2bR1R2ubR1uR1aba
    • Якщо не визнає ні a b, ні a, тоді єдиний спосіб R визнати a b - це якщо R 1 розпізнає порожню рядок, і в цьому випадку ми повертаємося до початкової проблеми, як описано вище, але для R 2 цього разу.R1abaRabR1R2

Коли "ми повертаємося до початкової проблеми", це означає, що єдине рішення для пошуку BRE, що розпізнає мову, - це знайти менший BRE, який має ту саму властивість. Це нескінченний спуск , тому немає БРЕ, що має бажану властивість.

Я не думаю, що існує "приємна" характеристика мов, розпізнаваних BRE, наприклад, мов, розпізнаваних "приємним" класом автомати.

Зауважте, що BRE-розпізнавані мови насправді не є підкласом звичайних мов, оскільки зворотні посилання додають виразної сили. Наприклад, розпізнається BRE, але, мабуть, не є регулярним. BRE без зворотних посилань - це лише синтаксичний цукор над регулярними виразами, тому мови, які вони можуть розпізнати, є підкласом звичайних мов.{www{a,b}}\(.*\)\1


1
Якщо ви використовуєте такий інструмент, як grep, який може прийняти кілька виразних розділених виразів у відповідність, приймає декартовий продукт усіх можливих чергувань (наприклад, {ab, ba} {ab, ba} стає {abba, abba, baab, baba}) достатньо, щоб бути еквівалентним будь-якому заданому "BRE-плюс-чергування" і, отже, будь-якій регулярній мові?
Випадково832

1
@ Random832: Спробуйте зробити (abc|bac)*.
rici
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.