Sunteți pe pagina 1din 2

LUCRAREA PRACTICA NR.

3
LIMBAJE FORMALE SI AUTOMATE 134

Aceasta lucrare practica trebuie predata atat prin e-mail la adresa


<sorina.predut@gmail.com> cat si pe serverul MOODLE pana in data de 24 mai
2013 ora 20:00 urmand ca in cadrul laboratorului din 27 mai sa fie prezentata.
Dupa data de 24 mai lucrarea practica se mai poate trimite prin email pentru o
perioada de gratie de 2 zile (48 de ore). Pentru fiecare zi partiala de intarziere se
vor scadea 2 puncte din nota atribuita pe lucrare. Dupa expirarea termenului de
gratie, lucrarea nu va mai fi acceptata si va fi notata cu 1.
Va trebui sa rezolvati o problema de la sectiunea A, una de la B si a treia de
la C. Numele functiilor, parametrii si valoarea returnata sunt sugestive. Puteti
implementa in orice alt mod cu conditia ca sa se respecte cerintele problemelor.
A.Limbaje regulate
1. Scrieti functiile: int afd_op(AFD &as1, AFD &as2, AFD &ad, int op); int
afd_c(AFD &as, AFD &ad); int afd_s(AFD &as, AFD &ad). Functia "afd_op",
in functie de "op", construieste automatul "ad" ce recunoaste reuniunea ("op"=1),
intersectia ("op"=2), diferenta ("op"=3), diferenta simetrica ("op"=4), respectiv
concatenarea ("op"=5) limbajelor recunoscute de automatele "as1", "as2". Ea
returneaza 1=succes, 0=esec. Functia "afd_c" construieste automatul "ad" ce recunoaste complementara in raport cu V* (V fiind alfabetul lui "as") a limbajului
recunoscut de "as". Ea returneaza 1=succes, 0=esec. Functia "afs_s" construieste
automatul "ad" ce recunoaste stelarea limbajului recunoscut de "as". Ea returneaza 1=succes, 0=esec. Scrieti un program demonstrativ care citeste automatele
necesare, le aplica functiile si afisaza automatele rezultate.
2. Scrieti functiile: int er2afnl(const char *e, AFNL &a); int afd2er(AFD &a,
char *e). Functia "er2afnl" construieste automatul "a" echivalent cu expresia regulata "e", iar functia "afd2er" construieste expresia regulata "e" echivalenta cu
automatul "a". Functiile returneaza 1=succes, 0=esec. Expresiile regulate folosesc
caracterele ASCII oarecare, operatorii $ (multimea vida), & (cuvantul vid), + (reuniune), . (concatenare), * (inchiderea Kleene), si parantezele ( ). Daca vreunul
din aceste caractere trebuie considerat caracter obisnuit, va fi precedat de \; de
asemenea, caracterul \ va fi desemnat prin \\. Scrieti un program demonstrativ
care citeste o expresie regulata, o transforma in AFNL-ul echivalent, transforma
AFNL-ul in AFD-ul echivalent, afisaza AFD-ul, transforma AFD-ul in expresia regulata echivalenta, apoi afisaza expresia.
B.Gramatici regulate (GR) si independente de context (GIC), automate stiva(AS)
1. Scrieti un program demonstrativ in care se citeste o GIC si o afisaza.
2. Scrieti un program demonstrativ in care se citeste o GR si o afisaza.
3. Scrieti un program demonstrativ in care se citeste un AS, apoi il afisaza.
1

LUCRAREA PRACTICA NR. 3

C.Limbaje regulate si independente de context


1. Scrieti functiile: int gr2afn(GR &gs, AFN &ad); int afd2gr(AFD &as, GR
&gd); Functia "gr2afn" construieste automatul "ad" echivalent cu gramatica "gs",
iar functia "afd2gr" construieste gramatica "gd" echivalenta cu automatul "as";
functiile returneaza 1=succes, 0=esec. Scrieti un program demonstrativ care citeste
o gramatica regulata si afisaza automatul echivalent, apoi citeste un automat si
afisaza gramatica regulata echivalenta.
2. Scrieti functiile: int gic2asv(GIC &gs, AS &ad); int asv2gic(AS &as, GIC
&gd); Functia "gic2asv" construieste automatul "ad" a.i. L&(ad)=L(gs), iar functia "asv2gic" construieste gramatica "gd" a.i. L(gd)=L&(as); functiile returneaza
1=succes, 0=esec. Scrieti un program demonstrativ care citeste o gramatica independenta de context si afisaza automatul rezultat, apoi citeste un automat si afisaza
gramatica independenta de context rezultata.

S-ar putea să vă placă și