Grmmtihe liere dl ontesto G = < VN,V,P, > VN - nsieme finito di simoli detti Non terminli V - nsieme finito di simoli detti erminli!!! V = VN! V, VN "#, V "#, VN $ V =# -. imolo distinto o Assiom del Linguggio!! % VN P - nsieme di Produzioni o Regole di Risrittur!!! P & VN x V
Proesso di generzione L Grmmti G 10 on produzioni 1.! - 2.! / 3.! ( ) i Gener stringhe ritmetihe! sempio: l string è derivt d nel seguente modo: "!! (regol 1) "!! (regol 1) "! (regol 2) "! (regol 2) " i! (regol 3) " i i! (regol 3) " i i! (regol 2) " i i i! (regol 3) pertnto: " - onveniente vere un ordine di pplizione delle regole? - L lero di generzione può essere ostruito in modi diversi? - possiile ostruire per l medesim string leri di!derivzione diversi?
Aleri di derivzione 1. # - 2. # / 3. # ( ) i Dt un grmmti non ontestule G tutte le stringhe s d ess generili possono essere rppresentte trmite un lero venti le seguenti proprietà: 1. L rdie è etihettt on il simolo inizile 2. Ogni nodo interno è etihettto on un simolo non terminle! VN 3. Ogni fogli è etihettt d un simolo terminle o dll string vuot " 4. e il nodo K è etihettto on un simolo non terminle A ed h k figli etihettti on i simoli!1,...,!k llor esiste un produzione dell form A #!1,...,!k 5. e $ w e w è un string di rtteri terminli llor w è rppresentt dlle foglie dell lero.
Prentesi ilnite L Grmmti G 11 gener stringhe di prentesi ilnite! " () due possiili derivzioni sono: # # () # () () # () ( ) # ( ) ( ) # # ( ) # ( ) # ( ) ( ) # ( ) ( ) ( ) ( )!!
L Derivzione ome lsse di equivlenz Dt un grmmti G è possiile pervenire ll generzione di un string on proessi di generzione diverse. Dte due generzioni D e D : D = x 1! x 2!...! x n D = x 1! x 2!...! x n se si verifi he : 1. " i! k x i = x i 2. x k-1 = x k-1 = u A v B w on u,v,w # V e A, B # VN 3. x k = u y v B w, on A $ y # P 4. x k = u Av z w, on B$ z # P 5. x k1 = x k1 = u y v z w si dirà he D preede D e si sriverà " u y v B w!u y v z w.... x k-1 = x k-1 = u A v B w " " " u A v z w! u y v z w.... "" D pre D
sempio D 1 =!! ()! (())! (( ))! (( ))( )! (( )) ( ) D 2 =!! ()! (())! (( )) ()! (( ))( )! (( )) ( )! Pertnto D 1 pre D 2 D 2 =!! ()! (())! (( )) ()! (( ))( )! (( )) ( ) D 3 =!! ()! (())! (( )) ()! (( ))( )! (( )) ( ) pertnto D 2 pre D 3
sempio ont. D 4 =!! ()! ()! ( )( )! (( ))( )! (( )) ( ) D 5 =!! ()! () ()! (()) ()! (( ))( )! (( )) ( ) D 6 =!! ()! () ()! (()) ()! (( ))( )! (( )) ( ) D 7 =!! ()! () ()! ( )( )! (())( )! (( )) ( ) D 8 =!! ()! ( )! ( )( )! (())( )! (( )) ( ) D 1 pre pre pre D 4 pre D pre 2 D D 3 pre pre 8 D 7 pre D D 5 pre 6 leftmost derivtion rightmost derivtion
Amiguità D 11 =!! ( )! (( ))! " (( ))! (( )) ()! (( )) ( )! (( )) ( )! ( ) ( )! Un Grmmti si die migu se medesime stringhe sono generte d leri sintttii di differente struttur ovvero on due distinte derivzioni left most ovvero on due distinte derivzioni right most ( )! lero lterntivo Per ui si può onludere he l grmmti G 11 è un grmmti migu ( ) ( )! ( )!
sempio di Grmmti Amigu L Grmmti G 12 on produzioni!!! - / id!! id!! è un grmmti migu
Aleri semntii e notzioni polhe un Alero semntio è un lero in ui i nodi interni rppresentno operzioni d effettursi sui suoi sottoleri, mentre i nodi fogli rppresentno operndi sempio di ostruzione Primo psso - togliere tutti i simoli intermedi venti un unio disendente eondo psso - ostituire d ogni simolo non terminle l opertore orrispondente
sempio di ostruzione Aleri semntii e notzioni polhe Questo lero è stto ostruito prtire dll seond versione dell lero sintttio visto in preedenz. l proedimento è orretto, m il risultto è, ome deve essere diverso in virtù dell miguità dell grmmti. Dt un espressione ostruit prtire d un grmmti non migu è possiile ostruire l lero semntio direttmente trmite opportuni lgoritmi. Un tle lero è ovvimente unio.! d / sqrt d
Aleri semntii e notzioni polhe Attrversndo in modo opportuno un lero semntio si può vere un sequenzilizzzione delle operzioni sndendo l string d sinistr verso destr e ollondo gli elementi dentro uno stk. sqrt / d d / sqrt sqrt / d notzione pol postfiss o invers - RPN (Reverse Polish Nottion) (visit dell lero in ordine postiipto, o postordine) notzione pol prefiss (visit dell lero in ordine ntiipto, o preordine) [e si è onosenz dell rietà delle operzioni oinvolte l notzione pol h l rtteristi di rppresentre un espressione in form linerizzt senz prentesi.] i leggono i simoli dell string memorizzndo gli operndi nello stk, ppen si trov un simolo di operzione l si effettu e si pone nello stk il risultto.
ogliere l miguità Nel so di grmmti migu, se si generno due leri sintttii diversi, si hnno due leri semntii diversi, he quindi induono un semnti divers per l prol rionosiut (nel nostro so un espressione) Le fonti di miguità dell Grmmti G 12 dipendono di seguenti motivi: 1. Non viene rispettt l preedenz degli opertori 2. Un sequenz di opertori identii si può rggruppre si d sinistr he d destr Un versione non migu dell grmmti G 12 è l seguente grmmti G 13! -! /! () id id!... Un fttore rppresent un espressione he non si può somporre rispetto d un opertore diente. Un identifitore o un espressione prentesizzt è un fttore. Un termine rppresent un espressione he non si può somporre rispetto d un opertore dditivo (, -) diente. n sostnz un termine è un prodotto (divisione) di più fttori Un espressione è un qulsisi omposizione di termini trmite opertori dditivi (,-).
Anor sull miguità Considerimo il seguente frmmento dell grmmti del Psl, sritt seondo l Bkus-Nur orm (BN) <sttement> ::= <if-sttement> <if-sttement> ::= if <exp> then <sttement> [else <sttement>] L frse if then if then else d viene derivt medinte due leri sintttii if then if then else d if then if then else d Questo sottolinguggio del Psl è miguo. due leri sintttii induono selte semntihe diverse rigurdo l ssoizione dell else on gli if. n Psl si stilise, on un regol estern ll grmmti, he l else si ssoi ll if più destr.
Anor sull miguità Grmmti non migu per lo stesso sottolinguggio. <sttement> ::= <open-sttement> <losed-sttement> <simple-sttement> <open-sttement> ::= if <exp> then <sttement> <open-sttement> ::= if <exp> then <losed-sttement> else <open-sttement> <losed-sttement> ::= <simple-sttement> <losed-sttement> ::= if <exp> then <losed-sttement> else <losed-sttement> O C C C C C if then if then else d? C if then if then else d
Anor sull miguità i può trsformre un grmmti migu in un non migu equivlente? Non sempre Ci sono linguggi ontext-free on l proprietà he ogni grmmti he li gener è migu, tli linguggi sono detti inerentemente migui sempi di linguggi inerentemente migui { n n m d m : n! 1, m!1}! { n m m d n : n! 1, m!1 } { i i : i! 0}! { i i : i!0 } Per molti linguggi di utilizzo prtio è sempre possiile trovre l grmmti non migu equivlente
Dt l grmmti 1.! - 2.! / 3.! ( ) i ostituzioni in Aleri di derivzione imo visto in he modo si possiile ostruire l lero di derivzione per l string i osservi ome ll interno di un perorso possimo trovri in presenz dello stesso simolo di vriile, rdie di un sottolero. sempre possiile sostituire il sottolero di un vriile on un ltro sottolero sempre riferito ll stess vriile. Quello he si produe è nor un lero di derivzione di un string legle del linguggio. Quest proprietà è tipi per le derivzioni dei linguggi Contex ree. nftti ogni simolo non terminle si può sviluppre in modo indipendente dl ontesto in ui si trov
sempio ostituzioni in Aleri di derivzione L grmmti! 0B 1A A! 0 0 1AA B! 1 1 0BB Gener tutte e sole le stringhe he hnno un ugul numero di 0 e di 1 Un possiile derivzione per l string 0011 è: " 0B "00BB " 001B " 0011 Un ltr possiile derivzione è: " 0B "00BB " 00B1 " 0011 0 B 0 B B 1 1 0 B 0 B B 1 1 0 B 0 B B B 1 0 B B 1 1 Quindi: " 0B "00BB " 00B1 " 000BB1 " 000B11 " 000111 (i st prlndo di un grmmti migu?) Possimo ripetere il proedimento indefinitmente ottenendo prole del linguggio vi vi resente un rtteristi dei linguggi Contex-free, he disende dll proprietà di sostituzione il ftto he l resit vveng in mnier ostnte. Ad esempio se un grmmti gener prole l ui lunghezz rese in modo esponenzile llor il linguggio non è liero dl ontesto.
orme Normli A prtire d un grmmti Context-free G è sempre possiile ostruire un grmmti equivlente G ovvero L(G) = L(G ) he ino le produzioni in forme prtiolri, dette forme normli. Le forme normli vengono uste per dimostrre proprietà prtiolri dei linguggi piuttosto he per sopi pplitivi. orm normle di Chomsky rtterizzt d regole di due tipi orm normle di Greih A! BC dove A, B, C " V N A! on " V rtterizzt d regole di un solo tipo A! # on " V e # " V N Nel seguito fremo riferimento solo ll form normle di Chomsky
orm Normle di Chomsky Prim di illustrre l trsformzione oorre effetture un serie di pssggi preliminri per rendere l grmmti dtt ll trsformzione stess (form ridott). pssggi effettuti srnno tutti rivolti ll determinzione di grmmtihe equivlenti rispetto quell di prtenz, on l eventule eslusione del simolo {!}. 1. A prtire d G viene ostruit un grmmti G 1 di tipo 2 senz!-produzioni he gener L(G) -{!} 2. A prtire dll grmmti G 1 si ostruise un grmmti G 2 di tipo 2 senz!-produzioni e senz produzioni unitrie. 3. A prtire dll grmmti G 2 si ostruise un grmmti G 3 di tipo 2 senz!-produzioni, senz produzioni unitrie e senz simoli inutili. 4. L grmmti G 4 equivlente ll grmmti di prtenz G oinide on G 3 se! " L(G), ltrimenti G 4 è rivt d G 3 introduendo un nuovo ssiom ed un opportuno insieme di produzioni su tle simolo.
orm Normle di Chomsky 1. liminzione delle!-produzioni L eliminzione delle!-produzioni viene ftt in due step. Nel primo step vengono individute le vriili (simoli non terminli) nnullili, nel seondo step si effettu l eliminzione delle!-produzioni. Un vriile (simolo non terminle) si die nnullile se questo può generre l string vuot. Primo step s1. " ACA A " A B C B " B C " C! i verifi immeditmente ome il simolo C si un simolo nnullile in qunto gener direttmente!. A prtire d C si verifi ome nhe il simolo A si nnullile osì ome il simolo. Pertnto i simoli nnullili sono A C. s2 " AB A " AA! B " BB! A prtire d A e d B, he sono immeditmente nnullili si riv l nnullilità di. Pertnto i simoli nnullili sono A B.
liminzione delle!-produzioni (ont.) orm Normle di Chomsky A questo punto simo in grdo di effetture l eliminzione delle!-produzioni on un proedimento lgoritmio he h l oiettivo di definire l grmmti equivlente ggiungendo opportune produzioni ll grmmti di prtenz. Per ogni produzione dell grmmti G del tipo A " X 1, X 2,..., X k, supponimo he m dei k simoli sino nnullili, llor l grmmti risultnte G 1 vrà 2 m versioni dell produzione (on l sol eezione di qundo m=k). noltre non verrnno riportte le produzioni dell form A "!. s1. (simoli nnullili A C) " ACA A " A B C B " B C " C! " ACA AC CA AA A C! A " A B C B " B C " C L!-produzione può omprire direttmente sull ssiom ondizione he questo on ompi ll destr di qulhe produzione s2 (simoli nnullili A B ) " AB A " AA! B " BB! " AB A B A " AA A B " BB B
orm Normle di Chomsky Osservzioni sull eliminzione delle!-produzioni Oss. 1- L!-produzione presente in " ACA AC CA AA A C! A " A B C B " B C " C non è signifitiv se non per l possiilità d prte dell grmmti di generre nhe l string vuot. nftti il linguggio L(G) generto dll grmmti G senz un tle!-produzione è perfettmente equivlente un grmmti G on tle!-produzione. Cioé L(G ) = L(G) # {!}. Oss. 2 - possiile ggiungere direttmente l!-produzione ll ssiom del linguggio ome nell esempio prim visto. Ciò è possiile ondizione he l ssiom non ompi in un prte destr di qulhe produzione. e quest eventulità si verifi è omunque possiile ggiungere l!-produzione l osto dell inserimento di un simolo non terminle ggiuntivo, seondo il seguente riterio. Criterio seguito VN = VN # { } P = P # { "!} # { " $ " $ % P} sempio " A A " Ad d " A! " A A " Ad d