Sunteți pe pagina 1din 10

Sarcina lucrrii: 1.

Pentru gramatica formal G = (VN, VT, P, S) construii 5 iruri, care aparin limbajului L(G) generat de aceast gramatic. Lungimea irului trebuie s fie nu mai mic, dect numrul de caractere din alfabet VN+2. 2. Pentru fiecare ir s se construiasc arborii de derivare. 3. Desenai automatul finit echivalent acestei gramatici. 4. La ce clas al gramaticilor dup Chomsky aparine gramatica dat? Varianta 3. VN={S, D,R }, VT={a, b,c,d,f } , P= { 1. S aS 2. S bD 3. S fR 4. D cD 5. D dR 6. R bR 7. R f 8. D d } Efectuarea lucrrii 1. Construim 5 iruri ce aparin limbajului L(G) generat de aceast gramatic: a) SaSabDabcDabcdRabcdbRabcdbf b) SbDbcDbccDbccdRbccdbRbccdbf c) SaSabDabcDabccDabccdRabccdbRabccdbf d) SbDbcDbcdRbcdbRbcdbbRbcdbbf e) SaSaaSaabDaacDaabccDaabcccDaabcccd 2. Penru fiecare ir construim arborii de derivare:

1. S /\ a S /\ a D /\ c D /\ d R /\ b R / f

2. S /\ b D /\ c D /\ c D /\ d R /\ b R / f

3. S /\ a S /\ b D /\ c D /\ c D /\ d R /\ b R / f

4. S /\ b D /\ c D /\ d R /\ b R /\ b R / f

5. S /\ a S /\ a S /\ b D /\ c D /\ c D /\ c D / d

3. Construim Automatul Finit echivalent cu aceast gramatic. AF=(Q, , , q0, F), unde Q mulimea de stri - vocabular - funcia de tranziie q0 starea iniial F mulimea strilor finale Algoritmul de construire AF: 1. Q = VN{X}={S, D, R , X} 2. =VT={a, b, c, d, f } 3. q0=S 4. F={X} 5. Pentru toate produciile definim : Iniial toate mulimile (A, b): = 0 1. S aS (S,a): = (S,a) {S} = {S} 2. S bD (S,b): = (S,a) {D} = {D} 3. S fR (S,f): = (S,f) {R} = {R} 4. D cD (D,c): = (D,c) {D} = {D}

5. D dR (D,d): = (D,d) {R} = {R} 6. R bR (R,b): = (R,b) {R} = {R} 7. R f (R,f): = (R,f) {X} = {X} 8. D d
(D,d): = (D,d) {X} = {X,R}

c b D d d a S X

f b

4. Gramatica dat, dup Chomky aparine tipului 3, deoarece toate produciile au forma: i. Dd ii. SaS
Unde a, b VT i A, B V N

Codul programului care genereaz cuvintele i arborele acestora:


<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf -8" /> <title>Lucrare de laborator NR.1 LFC</title> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.wz_jsgraphics.js"></script> <script type="text/javascript" src="js/arrowsandboxes.js"></script> <link href='http://fonts.googleapis.com/css?family=Bad+Script' rel='stylesheet' type='text/css'> <link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono' rel='stylesheet' type='text/css'> <link rel="stylesheet" type="text/css" href="styles.css" /> <link type="text/css" rel="stylesheet" href="style/arrowsandboxes.css"> </head> <body> <h1>Lucrare de laborator NR.1</h1>

<p class="author" align="center">st. gr. MI -131 <b>Burlacu Vasilii</b></p> <h2>Sarcina: <span>Pentru gramatica formal G = (V<sub>N</sub>, V<sub>T</sub>, P, S) construii 5 iruri, care aparin limbajului L(G) generat de aceast gramatic.</span> </h2> <?php $val_n = array("S","D","R"); $val_t = array("a","b","c","d","f"); $reguli = array( array("S" => "aS"), array("S" => "bD"), array("S" => "fR"), array("D" => "cD"), array("D" => "dR"), array("R" => 'bR'), array("R" => 'f'), array("D" => 'd') ); $rez = array(); $pas = array(); $parcurgere = array(); $parc_sf = array(); function generare($val_n, $reguli, $cuvint, $parcurgere) { global $rez; global $pas; global $parcurgere; global $parc_sf; if( strlen($cuvint) >= 6) { if( $cuvint[strlen($cuvint) -1] == 'R' ) { $cuvint[strlen($cuvint) -1] = "f"; if( ! in_array($cuvint, $rez) ) { $rez[] = $cuvint; array_push($parc_sf,$cuvint[strlen($cuvint) -1] = "f"); array_push($pas,$parcurgere); } } else if( $cuvint[strlen($cuvint) -1] == 'D' ) { $cuvint[strlen($cuvint) -1] = "d"; if( ! in_array($cuvint, $rez) ) { $rez[] = $cuvint; array_push($parc_sf,$cuvint[strlen($cuvint) -1] = "d"); array_push($pas,$parcurgere); } } else if( $cuvint[strlen($cuvint) -1] == 'd' || $cuvint[strlen($cuvint) -1] != 'f') { //$cuvint[strlen($cuvint) -1] = "d"; if( ! in_array($cuvint, $rez) ) {

$rez[] = $cuvint; //array_push($par c_sf,$cuvint[strlen($cuvint) -1] = "d"); array_push($pas,$parcurgere); } } } else if( $cuvint[strlen($cuvint) -1] != 'f' || $cuvint[strlen($cuvint) 1] != 'd') { foreach($reguli as $reg) { if(isset($reg[substr($cuvint, -1)])) { $pasi = $reg[substr($cuvint, -1)]; array_push($parcurgere,$pasi); $cuvint .= $reg[substr($cuvint, -1)]; //$cuvint[strlen($cuvint)-3] = ''; generare($val_n, $reguli, $cuvint, $parcurgere); } } } } $cuvint = "S"; $pasi = ''; generare($vn, $reguli, $cuvint, $parcurgere); echo "<h2>Primele 5 cuvintele obtinute:</h2>"; echo "<div class='cuvinte'>"; foreach($pas as $key => $value) { if($key > 4) break; echo "<p>".($key+1).". "; foreach($value as $key2 => $value2) { echo $value2[0]; } echo $parc_sf[$key];"</p>"; } echo "<div class='clr'></div></div><hr><h2>Arborii abtinuti:</h2>"; foreach($pas as $key => $value) { if($key > 4) break; echo "<div class='item'>"; echo "<h3>Arborele nr.".($key+1).".</h3>"; foreach($value as $key2 => $value2) { if($key2 == 0) { for($i=0;$i<($key2+6);$i++) echo "S<br/>"; }

echo "&nbsp";

for($i=0;$i<($key2+5);$i++) echo "&nbsp"; echo "/ \ <br/>"; for($i=0;$i<($key2+4);$i++) echo "&nbsp"; echo "<span class='box-m'>".$value2[0]." &nbsp".$value2[1]."</span>"; echo "<br/>";

if($key2==count($value) -1) { for($i=0;$i<($key2+6);$i++) echo "&nbsp"; echo "/ <br/> "; for($i=0;$i<($key2+5);$i++) ech o "&nbsp"; echo $parc_sf[$key]; } } echo "</div>"; } echo "<div class='clr'></div>"; ?> <div class="af"> <h2>Automatul Finit</h2> <ul> <?php foreach($reguli as $re) { foreach($re as $key => $value) { if(empty($value[1])) $val="X"; else $val = $value[1]; echo "<li><strong>".$key."&rarr;".$value."</strong><br/>"; if(empty($value[1])) { $s=''; for ($i=0;$i<count($reguli);$i++) { if($reguli[$i][$key][0] == $value[0] && !empty($reguli[$i][$key][1])) { $s.=",".$reguli[$i][$key ][1]; } } } echo "<span>&#948;(".$key.",".$value[0]."):=&#948;(".$key.",".$value[0].")&#8746;{". $val."} = {".$val."".$s."}</span> </li>"; } } ?> </ul> <pre class="arrows -and-boxes"> (s:S >f[r] >a[s]) >b (d:D >d[r,x] >c[d]) || (r: R >b[r]) >f ((x:X)) </pre> <div class="clr"></div> </div> </body> </html>

Concluzie: n urma efecturii acestei lucrri de laborator am luat cunotin cu creare limbajelor din gramatici formale. Pentru cuvintele generate am construit arborii de derivare i am desenat automatul finit echivalent cu gramatica dat. Pentru crearea cuvintelor i desenarea arborilor de derivare am scris un program n limbajul PHP, cu elemente HTML i CSS.

MINISTERUL EDUCAIEI REPUBLICII MOLDOVA UNIVERSITATEA TEHNIC A MOLDOVEI FACULTATEA CALCULATOARE, INFORMATIC I MICROELECTRONIC. CATEDRA INFORMATIC APLICAT

Raport
Limbaje formale i compilatoare
Gramatici formale. Automate finite.

A efectuat: A verificat:

st. gr. MI-131 Burlacu Vasilii lector superior Galina Marusic

Chiinu, 2014

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