Syntax Analysis Her programlama dilinin yazilan bir programin syntax olarak dogru olup olmadigini belirleyen kurallari vardir. Programlama dillerinin syntactic yapisi Contex-Free Grammer / BNF (Backus-Naur Form) le ifade edilir. 4/5/2004 Formal Diller 4.1
Grammarler Grammerlerin Yararlari Programlama dilinin syntactic yapisinin kolayca anlsilmasina olanak saglar Bazi tip grammar lerden otomatik olarak efficient parserlarin uretilmesi mumkundur. Grammarler yeni program yapilarinin mevcut yapilara kolayca eklenmesine olanak saglar 4/5/2004 Formal Diller 4.2
Parser 4/5/2004 Formal Diller 4.3
Parser Tipleri Compiler tasariminda kullanilan parserlar genel olararak iki tiptedir. Top-down parser : Parse tree leri top (root) dan bootom (leaves) lere dogru insaa ederler. Bottom-up parser : Bu tip leaves lerden baslayip root a dogru calisirlar. Her iki tip parser icin, giris file i soldan saga dogru taranir. 4/5/2004 Formal Diller 4.4
Syntax Hatalari ger compiler sadece bir programin syntactic olarak dogru yazilip yazilmadiga karar verseydi tasarimi son derece kolaylasacakti. Iyi compilerlar programcilara programlarinin neresinde ve ne tip hatalar yaptiklarini anlamalarina olanak saglarlar. Cogu grammarler hatalara compilerlarin nasil tepki gostermeleri gerektigini belirlemezler. Hatalara karsi nasil davranilmasi gerektigi tamamen compilerin kendine kalmistir. 4/5/2004 Formal Diller 4.5
Hata Tipleri Programci programini yazimi esnasinda cok degisik turlerde hatalar yapabilir. Lexical (identifier, keyword veya operatorun misspellingi) Syntactic (aritmetik bir ifadede unbalanced parantezlerin bulunmasi a*(b+c)) ) Semantic (bir operatorun tip uyusmazligi olan bir operanda uygulanmasi 100 % 12.13 ) Logical (recursive bir alt programda sonlanma kosulunun olmamasi) 4/5/2004 Formal Diller 4.6
Hatalar Genelde error detection (hata tespiti) ve recovery (hatadan donme) syntax analysis safhasinda gerceklestirilir. Bir cok hata syntactic dir ve lexical anayzerden dondurulen stringler dilin grammmar kurallarina uymazsa kolayca tespit edilebilirler. Semantic ve logical errorlarin compiler time da tespit edilmeleri cok daha zor bir istir. 4/5/2004 Formal Diller 4.7
rror Handling Mekanizmasi Parserin rror Handling Mekanizmasi baslica uc seyi yerine getirmeli rrorlarin acik ve dogru bir sekilde bildirmeli Her bir errordan kolayca recover yapabilmeli ve sonraki errorlari tespit edebilmeli Dogru programlarin derleme suresini (compiling time) cok artirmamali Bazi parsing methods LL ve LR methodlari hatalar olusur olusmaz tespitini yapabilirler. 4/5/2004 Formal Diller 4.8
rror-recovery Stratejileri Bir cok error-recovery strategileri mevcut. Panic mode n basit yontemdir rror tespit edildiginde, onceden belirlenmis senkronize gorevi goren bir token (semicolon, end) gorunceye kadar parser giris sembollerini atlar. Dezavantaj: Baska errorlarin bulunabilecegi onemli bir miktar kod atlanir. Avantaj: Infinite-loop (sonsuz dongu) a girmesi imkansiz. Phrase-level recovery rror tespit edildiginde, geri kalan giris kismi icin yerel duzeltme uygulanir. Ornek: comma (,) nin semicolon (;) la yerdegistirilmesi, fazlalik semicolonun silinmesi ger gercek error tespit edildigi yerden once olusmussa hatayi duzeltmede ek zorluklar olusur 4/5/2004 Formal Diller 4.9
rror Productions rror-recovery Stratejileri devam Dilin grammarine programcinin yapabilecek oldugu yaygin hatalari tespit edebilecek yeni kurallar eklenir. Parser bu yeni eklenen grammar kurallari dikkate alinarak tasarlanir Global Correction Pratikte pek uygulanmaz. Cok yavas. Yanlis yazilan bir program gosteren bir x stringine minimum sayida degisiklikler (token insertion/deletion/change icin) yapilarak syntactic olarak dogru y stringinin elde edilmesi. 4/5/2004 Formal Diller 4.10
CONTXT-FR GRAMMRS (CFG) CFG recursive yapilardan olusan (production) bir grup kurala denir. CFG G=(V,T,P,S) quadruple ile gosterilir. V: variable (Nonterminal) sonlu seti T: terminallerin sonlu seti P: production larin sonlu seti A-> (A: nonterminal (V U T)* nin elemani. S: Baslangic sembolu olarak adlandirilan ozel bir nonterminal 4/5/2004 Formal Diller 4.11
G = (V,T,P,S), V={S,A,B}, T={a,b} P: S -> ab ba A -> a as baa B -> b bs abb L(G) sifirdan buyuk esit sayida a ve b lerden olusan stringlerin kumesi. 4/5/2004 Formal Diller 4.12
expr expr expr expr op -> expr op expr -> (expr) -> - expr -> id -> + - * / m 4/5/2004 Formal Diller 4.13
Derivations (Turetimler) ger A ise A ger 1 2 3 n ise 1 den n turetilebilir denir. * + sifir veya daha fazla adim bir adim bir veya daha fazla adim + ger S w ise w ye G nin bir sentence i denir. 4/5/2004 Formal Diller 4.14
--> + --> * --> ( ) --> - --> id Derivations (Turetimler) Soru: -(id+id) yukaridaki kurallarla belirlenen dilin bir elemani mi? ==> - ==> - ( ) ==> - ( + ) ==> - (id + ) ==> - ( id + id ) 4/5/2004 Formal Diller 4.15
Leftmost / rightmost derivations Leftmost derivation ger her bir turetim adiminda leftmost nonterminal yer degistirilirse buna leftmost derivation denir Rightmost derivation ger her bir turetim adiminda rightmost nonterminal yer degistirilirse bina righmost derivation denir. 4/5/2004 Formal Diller 4.16
Parse Trees --> + --> * --> ( ) --> - --> id - ( ) + id id - ( id + id ) icin parse tree 4/5/2004 Formal Diller 4.17
--> + --> * --> ( ) --> - --> id - ( id + id ) icin parse tree - - ( ) - ( ) - ( ) - ( ) + + + id id id 4/5/2004 Formal Diller 4.18
--> + --> * --> ( ) --> - --> id id + id * id icin parse tree + id + id + * id + id * id + id * + id * id id * + * id + * id + id * id + id * 4/5/2004 Formal Diller 4.19 + id Iki farkli parse tree * id id