CFG розшифровується як контекстно-вільна граматика. Це формальна граматика, яка використовується для створення всіх можливих шаблонів рядків у даній формальній мові. Безконтекстна граматика G може бути визначена чотирма кортежами як:
G = (V, T, P, S)
Де,
Г - це граматика, яка складається з набору правил виробництва. Він використовується для створення рядка мови.
Т є остаточним набором термінального символу. Позначається малими літерами.
IN є остаточним набором нетермінального символу. Позначається великими літерами.
П це набір правил виробництва, який використовується для заміни нетермінальних символів (у лівій частині виробництва) у рядку на інші термінальні або нетермінальні символи (у правій стороні виробництва).
у регулярному виразі Java
С це початковий символ, який використовується для отримання рядка. Ми можемо вивести рядок, багаторазово замінюючи нетермінали правою частиною продукту, доки всі нетермінали не будуть замінені термінальними символами.
приклад 1:
Побудуйте CFG для мови, яка має будь-яку кількість а над набором ∑= {a}.
рішення:
Як ми знаємо, регулярний вираз для наведеної вище мови такий
r.e. = a*
Правило створення регулярного виразу таке:
S → aS rule 1 S → ε rule 2
Тепер, якщо ми хочемо вивести рядок 'aaaaaa', ми можемо почати з початкових символів.
S aS aaS rule 1 aaaS rule 1 aaaaS rule 1 aaaaaS rule 1 aaaaaaS rule 1 aaaaaaε rule 2 aaaaaa
р.е. = a* може генерувати набір рядків {ε, a, aa, aaa,.....}. Ми можемо мати нульовий рядок, оскільки S є початковим символом, а правило 2 дає S → ε.
приклад 2:
Побудуйте CFG для регулярного виразу (0+1)*
рішення:
pothineni ram
CFG може бути надано,
Production rule (P): S → 0S | 1S S → ε
Правила складаються з комбінації 0 і 1 із символом старту. Оскільки (0+1)* вказує на {ε, 0, 1, 01, 10, 00, 11, ....}. У цьому наборі ε є рядком, тому в правилі ми можемо встановити правило S → ε.
приклад 3:
Побудуйте CFG для мови L = де w € (a, b)*.
рішення:
Рядок, який можна створити для даної мови, це {aacaa, bcb, abcba, bacab, abbcbba, ....}
Граматика може бути:
S → aSa rule 1 S → bSb rule 2 S → c rule 3
Тепер, якщо ми хочемо вивести рядок 'abbcbba', ми можемо почати з початкових символів.
S → aSa S → abSba from rule 2 S → abbSbba from rule 2 S → abbcbba from rule 3
Таким чином, будь-який рядок цього типу може бути отриманий із заданих правил виробництва.
java hashmap
Приклад 4:
Побудуйте CFG для мови L = aпb2нде n>=1.
рішення:
Рядок, який можна згенерувати для даної мови, це {abb, aabbbb, aaabbbbbb....}.
Граматика може бути:
S → aSbb | abb
Тепер, якщо ми хочемо вивести рядок 'aabbbb', ми можемо почати з початкових символів.
S → aSbb S → aabbbb