Регулярна граматика проти контексту


96

Я навчаюся для мого тесту з обчислювальних мов , і є одна ідея, що я маю проблеми, обертаючи голову.

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

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

Хтось може допомогти мені скласти все це разом?

Відповіді:


70

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

Так, наприклад, для паліндрому має вигляд,

S->ABA
A->something
B->something

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

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


13
Перше: регулярні граматики можуть бути неоднозначними (приклад Кая Кухенбекера: S -> aA | aB, B -> a, A -> a). Єдине, що є лише один спосіб розташування вузлів у дереві синтаксису (наприклад, неоднозначність асоціативності не існує, коли використовується звичайна граматика). По-друге:
Правої

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

11
Цей приклад насправді помилковий. Якщо ми уявимо собі повні правила A-> a | cі B->bтоді ця граматика допускає непаліндроми. Наприклад, я міг би зробити: S->ABA->aBA->abA->abc. Проблема в тому, що ми не хочемо створювати дві змінні в першому правилі, а два термінали. Можливість граматики, яка дозволяє паліндроми, така:S -> aSa | bSb | a | b
gdiazc

Є паліндроми, які можна виразити звичайною граматикою: паліндроми, що складаються з одного символу. Наприклад, S -> aSa | eі a(aa)*aобидва описують регулярний мову. Це показує, що CFG може описати звичайну мову, навіть якщо вона порушує ліву або праву лінійність. Слід визнати, що це не дуже очевидний паліндром ..
Мартін,

Подумавши, ця відповідь насправді неправильна. Там сказано, що "безконтекстна" граматика - це в основному будь-яка комбінація терміналів і нетерміналів. "Однак tu ^ nvw ^ mxy ^ kz - це комбінація терміналів і нетерміналів, але не контекстна.
Чарлі Мартін,

58

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

Отже, якщо подумати про лемму про накачування для звичайних мов , то, по суті, вона говорить про те, що будь-яку регулярну мову можна розбити на три частини, x , y та z , де всі екземпляри мови мають xy * z (де * - це повторення Kleene, тобто 0 або більше копій y .) У вас в основному є один "нетермінал", який можна розширити.

А як щодо мов без контексту? Існує аналогічна лемма про накачування для контекстно-вільних мов, яка розбиває рядки в мові на п’ять частин, uvxyz , і де всі екземпляри мови знаходяться в uv i xy i z , для i ≥ 0. Тепер у вас є два "нетермінали ", які можна повторити або перекачати, якщо у вас однаковий номер .


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

16

Різниця між регулярною та вільною від контексту граматикою: (N, Σ, P, S): термінали, нетермінали, виробництва, початковий стан Символи терміналу

● елементарні символи мови, визначені формальною граматикою

● abc

Нетермінальні символи (або синтаксичні змінні)

● замінено групами кінцевих символів відповідно до виробничих правил

● ABC

звичайна граматика: права або ліва звичайна граматика права звичайна граматика, всі правила підпорядковуються формам

  1. B → a, де B - нетермінал у N, а - термінал у Σ
  2. B → aC, де B і C знаходяться в N, а a в Σ
  3. B → ε, де B знаходиться в N, а ε позначає порожній рядок, тобто рядок довжиною 0

залишив регулярну граматику, всі правила підпорядковуються формам

  1. A → a, де A - нетермінал в N, а - термінал у Σ
  2. A → Ba, де A і B знаходяться в N, а a в Σ
  3. A → ε, де A знаходиться в N, а ε - порожній рядок

граматика без контексту (CFG)

○ офіційна граматика, в якій кожне виробниче правило має вигляд V → w

○ V - це один нетермінальний символ

○ w - рядок терміналів та / або нетерміналів (w може бути порожнім)


5

Звичайна граматика: - граматика, що містить продукцію, наведена нижче - RG:

V->TV or VT
V->T

де V = змінна і T = термінал

RG може бути лівою лінійною граматикою або правою лінійною граматикою, але не середньолінійною граматикою.

Як ми знаємо, всі РГ є лінійною граматикою, але лише ліва лінійна або права лінійна граматика є РГ.

Звичайна граматика може бути неоднозначною.

S->aA|aB
A->a
B->a

Неоднозначна граматика: - для рядка x існує більше одного LMD або більше ніж RMD або більше одного дерева синтаксичного аналізу або одного LMD та одного RMD, але обидва створюють різні дерева синтаксичного аналізу.

                S                   S

              /   \               /   \
             a     A             a     B
                    \                   \
                     a                   a

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

CFG: - Граматика, яку називають CFG, якщо її виробництво знаходиться у формі:

   V->@   where @ belongs to (V+T)*

DCFL: - як ми знаємо, усі DCFL - це LL (1) граматика, а всі LL (1) - LR (1), тому це ніколи не буде двозначним. тому DCFG ніколи не буде двозначним.

Ми також знаємо, що всі RL є DCFL, тому RL ніколи не буде двозначним. Зауважте, що RG може бути неоднозначним, але RL - ні.

CFL: CFl може бути чи не однозначним.

Примітка: RL ніколи не бути за своєю суттю двозначним.


4

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

  • Основи лексичного аналізу
  • Представляють звичайні мови

Безкоштовні граматики

  • Основа синтаксичного аналізу
  • Представляють мовні конструкції

введіть тут опис зображення


Ні, це короткий опис, прочитайте ще раз і перевірте зображення.
Ахмед Салем

3

Граматика є без контексту, якщо всі правила виробництва мають вигляд: A (тобто ліва частина правила може бути лише однією змінною; права частина є необмеженою і може бути будь-якою послідовністю терміналів та змінних). Ми можемо визначити граматику як 4-кортеж, де V - скінченний набір (змінні), _ - скінченний набір (термінали), S - початкова змінна, а R - скінченний набір правил, кожне з яких є відображенням V
звичайна граматика є правою чи лівою лінійною, тоді як грамота без контексту - це в основному будь-яка комбінація терміналів та нетерміналів. отже, ми можемо сказати, що звичайна граматика є підмножиною безконтекстної граматики. Після цих властивостей можна сказати, що набір Context Free Languages ​​також містить набір регулярних мов


-1

В основному звичайна граматика є підмножиною вільної від контексту граматики, але ми не можемо сказати, що вільна граматика Every Context є звичайною граматикою. В основному контекстна вільна граматика неоднозначна, а звичайна граматика може бути неоднозначною.


-4

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


4
@dinesh Звичайна граматика може бути неоднозначною. Нагадаємо, що граматика неоднозначна, якщо існують два різні дерева синтаксису і що дерево синтаксису позначено. Отже, ізоморфні дерева - це різні дерева. Тобто така проста граматика, як S -> aA | aB, B -> a, A -> a є неоднозначним, оскільки для слова 'aa' існують два дерева синтаксису, які є ізоморфними, але різними.
Kai Kuchenbecker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.