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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

● abc

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

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

● 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 может быть пустым)

Обычные выражения

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

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

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

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

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

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

 V->TV or VT V->T 

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

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

Как мы знаем, все RG являются линейной грамматикой, но только левая линейная или правая линейная грамматика RG.

Регулярная грамматика может быть неоднозначной.

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

Неоднозначная грамматика: – для строки x существует более одного LMD или больше RMD или более одного дерева синтаксического анализа или одного LMD и одного RMD, но оба производят разное дерево parsingа.

  SS / \ / \ a A a B \ \ aa 

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

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 никогда не будет по своей сути неоднозначным.

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

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

Давайте будем гением компьютера.