Una gramàtica consisteix en regles compostes per una o més produccions i un o més símbols terminals. En aquest exercici suposarem que les produccions comencen amb una lletra majúscula, i que la producció inicial s’anomena @I@. Per exemple, la gramàtica següent genera totes les parentitzacions correctes (no buides):
| @I@ | @( )@ | @( I )@ | @I I@ |
En aquest exemple, @( )@ es genera aplicant la primera regla, @( ( ) )@ es genera aplicant la segona regla i després la primera, @( ) ( )@ es genera aplicant la tercera regla i després la primera dues vegades, etcètera.
Suposem que @lambda@ denota un símbol terminal especial buit. Usant aquesta convenció, la gramàtica següent genera totes les paraules que comencen amb @a@ que contenen un nombre parell de @a@s i un nombre senar de @b@s:
| @I@ | @a SS@ | |||||
| @SS@ | @a PS@ | @b SP@ | ||||
| @SP@ | @a PP@ | @b SS@ | ||||
| @PS@ | @a SS@ | @b PP@ | ||||
| @PP@ | @lambda@ | @a SP@ | @b PS@ |
Feu un programa que escrigui termes generables amb una gramàtica donada. Si una producció té regles (numerades de 0 a ), per decidir quina regla triar, feu servir un generador de nombres pseudoaleatoris amb paràmetres , , i , com està explicat a l’exercici problem://problemsjutge.org:problems/i2/roura/camins-aleatoris.pbm:
int atzar(int r, int m, int a, int b, int& s) {
s = (a*s + b)%m;
return s%r;
}
L’entrada comença amb un natural que indica el nombre de produccions. Cada producció comença amb el seu nom i el seu nombre de regles . Cada regla es descriu amb un natural , seguit de noms de produccions o de símbols terminals.
L’entrada acaba amb el nombre de termes que cal generar, seguit dels quatre naturals , , i que defineixen el generador de nombres pseudoaleatoris.
Escriviu línies, cadascuna amb el terme obtingut aplicant les regles indicades pel generador de nombres pseudoaleatoris. Useu les produccions d’esquerra a dreta dins de cada regla. Cada paraula ha d’estar precedida d’un espai.
Autoria: Salvador Roura
Generació: 2026-01-25T11:17:19.313Z
© Jutge.org, 2006–2026.
https://jutge.org