it-swarm.com.ru

Обычные и контекстно-свободные грамматики

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

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

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

Может ли кто-нибудь помочь мне собрать все это вместе?

86
Jason Baker

Обычная грамматика является либо правой, либо левой линейной, тогда как грамматика без контекста - это, по сути, любая комбинация терминалов и нетерминалов. Следовательно, вы можете видеть, что обычная грамматика является подмножеством контекстно-свободной грамматики.

Так, для палиндрома, например, имеет вид,

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

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

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

66
Sujoy

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

Итак, если мы подумаем о прокачка леммы для регулярных языков , то, по сути, говорится, что любой регулярный язык можно разбить на три части: x , y и z , где все экземпляры языка находятся в xy * z (где * - повторение Клини, т. е. 0 или более копий y .) У вас в основном есть один "нетерминал", который можно расширить.

А как насчет контекстно-свободных языков? Существует аналогичная прокачка леммы для контекстно-свободных языков , которая разбивает строки в языке на пять частей, uvxyz , и где все экземпляры языка находятся в уфяхуяz , для i ≥ 0. Теперь у вас есть два "нетерминала", которые можно копировать или накачать, до тех пор, пока у вас есть тот же номер .

52
Charlie Martin

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

● элементарные символы языка, определенные формальной грамматикой

● abc

Нетерминальные символы (или синтаксические переменные)

● заменены группами терминальных символов в соответствии с правилами производства

● азбука

обычная грамматика: правильная или левая обычная грамматика правильная правильная грамматика, все правила подчиняются формам

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

оставил обычную грамматику, все правила подчиняются формам

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

контекстно-бесплатная грамматика (CFG)

○ формальная грамматика, в которой каждое производственное правило имеет форму V → w

○ V является одним нетерминальным символом

○ w - строка терминалов и/или нетерминалов (w может быть пустым)

13
stringRay2014

Регулярные выражения

  • Основы лексического анализа
  • Представлять обычные языки

Контекстные бесплатные грамматики

  • Основа разбора
  • Представлять языковые конструкции

enter image description here

6
Ahmed Salem

Обычная грамматика: - грамматика, содержащая произведение следующим образом: RG:

V->TV or VT
V->T

где V = переменная и T = клемма

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

Как мы знаем, все RG являются линейной грамматикой, но только левосторонняя или правая линейная грамматика являются 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
user2623906

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

3
Wafiullah NAeemzi Afghan