Різниця між регулярним виразом і граматикою в автоматах


12

Я новачок в автоматах, і мені вчора було коротко ознайомлено з регулярними виразами. Я прочитав різні правила, які визначають регулярний вираз. Але я не в змозі розмежовувати регулярні вирази та граматику мови (я не вчив граматики для регулярних виразів).

Я розумію, що граматика допомагає нам генерувати дійсні рядки мовою, але тоді це правила визначення стану регулярних виразів. Тож у чому полягає різниця? Я запитав свого професора, і він сказав, що регулярні виразки - це основні рядки в мові, а граматика - це набір правил для будь-якої мови, які вищого рівня, ніж регулярні вирази. Чи може хтось надати ще більш глибоку інформацію?

Відповіді:


22

Регулярні вирази, регулярні граматики і кінцеві автомати - це просто три різних формалізми для однієї і тієї ж речі. Існують алгоритми для перетворення з будь-якого з них в будь-який інший.

Основна причина, що у нас всіх трьох, полягає в тому, що вони були створені незалежно, з першим набором відповідностей (також є кілька інших формалізмів), доведеним Кліном (цей результат або його частина називається теоремою Клінова).

Тож у цьому контексті, залежно від того, в який бік ви хочете запускати моделі, всі вони розпізнають або генерують рядки звичайної мови, і математично, в цьому сенсі немає різниці.

Звичайно, іноді одну модель легше використовувати, ніж іншу, для конкретного завдання, завдяки деталізації формалізму. Крім того, те, як вони працюють в людській голові, часто дещо відрізняється, кінцеві автомати "відчувають", як комп'ютери, регулярні вирази "відчувають" так, ніби ви будуєте рядок з менших підрядків, а звичайні граматики "відчувають" як більш традиційну граматичну виведення або класифікація речення мовою (не дивно, коли ви дивитесь на історію).

Отже, для порівняння двох, давайте визначимо їх:

Регулярні вирази

Тож регулярні вирази рекурсивно визначаються наступним чином:

  1. - це регулярний вираз
  2. ε - регулярний вираз
  3. a Σa - регулярний вираз для кожногоaΣ
  4. якщо і - регулярні вирази, то БAB
    • AB - регулярний вираз (конденсація)
    • AB - регулярний вираз (чергування)
    • A - регулярний вираз (зірка Клінова)

Поряд з деякою семантикою (тобто, як ми інтерпретуємо оператори для отримання рядка), ми отримуємо спосіб генерації рядків із звичайної мови.

Регулярні граматики

Звичайні граматики складаються з чотирьох кортежів де - безліч нетерміналів, - безліч терміналів, - нетермінал початку, а - безліч виробництв, які розповідають нам, як змінити стартовий символ, крок за кроком, на рядок у . може мати свої виробництва з одного з двох типів (не обидва, однак):N Σ S P Σ P(N,Σ,P,SN)NΣSPΣP

Праві лінійні граматики

BCaε

  1. Ba
  2. BaC
  3. Bε

Ліві лінійні граматики

BCa

Що задуматися

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

S

Однак це дійсно те саме, що ви робите, і як ви бачите метафору їхньої функції, залежить від вас.


Я б більше наголошував на тому, що граматики генерують рядки в мові, тоді як регулярні вирази (як ви вже сказали) більше відповідність шаблону, який відповідає (або "тестує") кожному рядку мови.
Ран Г.

@ RanG., Це дійсно звичайний спосіб його думати, але ви можете перевернути обидва; Аналіз знизу вгору тестує рядок проти граматики, і ви можете використовувати регулярний вираз як компактний опис мови (хоча це, мабуть, рідше).
Люк Матьєсон

NSR

NRRP

@simpleBob, Ага так, це, безумовно, помилка друку. Дякую!
Люк Матьєсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.