Является ли эта контекстно-свободная грамматика регулярным выражением? - PullRequest
2 голосов
/ 05 февраля 2010

У меня есть грамматика, определенная следующим образом:

A -> aA*b | empty_string

Является ли A регулярным выражением? Я не понимаю, как интерпретировать грамматику БНФ.

Ответы [ 3 ]

8 голосов
/ 05 февраля 2010

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

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

Правило производства

(1)    A -> aA*b | 
(2)         empty_string

a и b являются терминальными символами - они находятся в алфавите языка и не могут быть расширены. Когда у вас больше нет нетерминалов с левой стороны, все готово.

Таким образом, этот язык определяет слова, которые похожи на сбалансированные скобки, за исключением случаев, когда a и b вместо ( и ).

Например, вы можете произвести ab следующим образом:

A -> aA*b (using 1)
aAb -> ab (using 2)

Точно так же вы можете произвести aabb:

A -> aA*b (1)
aAb -> aaA*bb (1)
aaAbb -> aabb (2)

Или даже aababb:

A -> aA*b
aA*b -> aabA*b:
aaba*b -> aababA*b:
aababA*b: -> aababb

Получите это? Символ звезды может быть немного запутанным, потому что вы видели его в регулярных выражениях, но на самом деле он делает то же самое, что и здесь. Он называется Kleene-closure и представляет все слова, которые вы можете сделать с 0 или более A s.

2 голосов
/ 05 февраля 2010

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

грамматики BNF - это контекстно-свободные грамматики, которые генерируют языки без контекстов и могут быть проанализированы с помощью автоматов Push Down (стековые машины)

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

0 голосов
/ 05 февраля 2010

A представляется правилом грамматики BNF. Я не совсем уверен, почему вы путаете это с регулярным выражением. Вы смущены, потому что в нем есть *? Все, что имеет *, не является регулярным выражением.

...