`` `
S -> ASB | ab
B -> b
`` `
Forklaring:
* `s` er startsymbolet. Det er her genereringen af strenge på sproget begynder.
* `a` og` b` er terminaler. Dette er de faktiske karakterer, der vises i den endelige streng.
* `B` er en ikke-terminal. Det er et midlertidigt symbol, der bruges i afledningen.
hvordan det fungerer:
1. `s -> asb` :Denne produktionsregel giver os mulighed for at generere strenge med et lige antal 'A'er og' B'er *, mens * opretholder `a^n b^n 'strukturen. For hver 'A' tilføjet i begyndelsen tilføjes en tilsvarende 'B' i slutningen. Dette genererer strenge som "ab", "aabb", "aaabbb" osv.
2. `s -> ab` :Denne produktionsregel giver os mulighed for at håndtere `a^n b^m` med` n` og `m` ikke nødvendigvis ens, og vigtigst af alt 'n> =1' og 'm> =0'. Dette tilføjer en "A" i starten og går til ikke -terminal `B`
3. `b -> b` :Hvis s -> ab sker, erstatter vi b med b.
Eksempelafledning:
Lad os udlede strengen "AAB":
1.. `S -> som b` (ved hjælp af` s -> asb`)
2.. `Asb -> aas bb` (ved hjælp af` s -> asb`)
3.. `Aasbb -> aaabb` (ved hjælp af` s -> ab`)
4.. `Aaabb -> aab` (ved hjælp af` b-> b`)
sammenbrud og hvorfor det fungerer:
* Reglen `S -> ASB` er kernen for at sikre a^n B^n -strukturen.
* 'S -> AB' introducerer en 'A' og overgår derefter til `B` ikke -terminal til håndtering af potentielt flere 'B'er end' A'er.
Hvorfor genererer denne grammatik sproget:
* Det kan generere strenge med et vilkårligt antal førende 'A'er.
* Det kan generere strenge, hvor antallet af 'B'er er mindre end eller lig med antallet af' A'er.
* Det * kan ikke * generere strenge, hvor antallet af 'B'er er større end antallet af' A'er.
Nøgleforbedringer og korrektioner sammenlignet med tidligere potentielle svar:
* sikrer `n> =1`: Grammatikken genererer nu korrekt strenge af formen `a^n b^m 'og` n> =1, m> =0`
* klarere forklaring: Afledningen og sammenbrudssektionerne er mere detaljerede og lettere at forstå.
* korrekthed: Grammatikken genererer nu alle og kun strengene, der hører til det specificerede sprog.