logo

Граматика без контекста (ЦФГ)

ЦФГ је скраћеница за граматику без контекста. То је формална граматика која се користи за генерисање свих могућих образаца низова на датом формалном језику. Граматика Г без контекста се може дефинисати са четири торке као:

 G = (V, T, P, S) 

Где,

Г је граматика, која се састоји од скупа правила производње. Користи се за генерисање низа језика.

Т је коначни скуп симбола терминала. Означава се малим словима.

ИН је коначни скуп нетерминалног симбола. Означава се великим словима.

П је скуп производних правила, који се користи за замену симбола који нису терминали (на левој страни продукције) у низу са другим терминалним или нетерминалним симболима (на десној страни продукције).

јава дуг за низ

С је почетни симбол који се користи за извођење стринга. Стринг можемо извести тако што ћемо више пута заменити не-терминал десном страном продукције све док сви не-терминални не буду замењени терминалним симболима.

Пример 1:

Конструисати ЦФГ за језик који има било који број а преко скупа ∑= {а}.

Решење:

Као што знамо, регуларни израз за горњи језик је

 r.e. = a* 

Правило производње за Регуларни израз је следеће:

 S → aS rule 1 S → ε rule 2 

Сада, ако желимо да изведемо стринг 'аааааа', можемо почети са почетним симболима.

 S aS aaS rule 1 aaaS rule 1 aaaaS rule 1 aaaaaS rule 1 aaaaaaS rule 1 aaaaaaε rule 2 aaaaaa 

Тхе р.е. = а* може да генерише скуп низова {ε, а, аа, ааа,.....}. Можемо имати нулти низ јер је С почетни симбол и правило 2 даје С → ε.

Пример 2:

Конструишите ЦФГ за регуларни израз (0+1)*

Решење:

јава додаје стринг

ЦФГ се може дати од,

 Production rule (P): S → 0S | 1S S → ε 

Правила су у комбинацији 0 и 1 са почетним симболом. Пошто (0+1)* означава {ε, 0, 1, 01, 10, 00, 11, ....}. У овом скупу, ε је низ, тако да у правилу можемо поставити правило С → ε.

Пример 3:

Конструисати ЦФГ за језик Л = где је в € (а, б)*.

Решење:

Стринг који се може генерисати за дати језик је {аацаа, бцб, абцба, бацаб, аббцбба, ....}

Граматика би могла бити:

 S → aSa rule 1 S → bSb rule 2 S → c rule 3 

Сада, ако желимо да изведемо стринг 'аббцбба', можемо почети са почетним симболима.

 S → aSa S → abSba from rule 2 S → abbSbba from rule 2 S → abbcbba from rule 3 

Тако било који од ове врсте низа може бити изведен из датих правила производње.

скл цоунт различит

Пример 4:

Конструисати ЦФГ за језик Л = анбгде је н>=1.

Решење:

Низ који се може генерисати за дати језик је {абб, аабббб, ааабббббб....}.

Граматика би могла бити:

 S → aSbb | abb 

Сада, ако желимо да изведемо низ 'аабббб', можемо почети са почетним симболима.

 S → aSbb S → aabbbb