440 likes | 748 Views
Sözdizimsel Çözümlemeye Giriş. Taslak. Düzgün Diller Sözdizimsel Analiz Anahatarı Context-free gram erler (CFG’s) Türetmeler( türetmeler ). Diller ve Makineler( Automata ). Bilgisayar Biliminde formal diller çok önemlidir Özellikle programla ma dillerinde RL(düzgün diller)
E N D
Taslak • Düzgün Diller • Sözdizimsel Analiz Anahatarı • Context-free gramerler (CFG’s) • Türetmeler(türetmeler)
Diller ve Makineler(Automata) • Bilgisayar Biliminde formal diller çok önemlidir • Özellikle programlama dillerinde • RL(düzgün diller) • En çok kullanılan en zayıf biçimsel dil türüdür • Pek çok uygulaması vardır • Ayrıca CFGler işlenecektir
RL’lerin Kısıtlamaları • Sezgi: Yeterince uzun zaman çalışan bir sonlu durum makinesinde durumların tekrar edilmesi gerekir • Bir sonlu durum makinesi belli bir durumu kaçıncı defa ziyaret ettiğini hatırlayamaz • Sonlu makinede sonlu hafız vardır. Bu hafıza • sadece bulunulan durumu saklar • Belli bir sayının dışında sayma yapamaz • Örnek:dengeli parantezlerden oluşan dil düzgün bir dil değildir: { (i )i | i>= 0}
Çözümleyicinin fonksiyonu • Girdi: Sözcüksel analizden çıkan bir dizi token • Çıktı: Programın çözümleme ağacı(Çözümleme ağacı)
IF-THEN-ELSE = INT INT ID ID Örnek • İlk if x = y then 1 else 2 fi • Çözümleyici girdi IF ID = ID THEN INT ELSE INT FI • Çözümleyici çıktı
Çözümleyicinin rolü • Herhangi bir token dizisi bir program olamaz. . . • . . . Çözümleyici geçerli ve geçersiz token dizilerini ayırdedebilmelidir • İhtiyacımız olan • geçerli token dizilerini tanımlayacak bir dil ve • geçerli ve geçersiz token dizilerini ayırdedecek bir metottur
Programlamadillerinin yapısı • programlama dilleri tekraralamalı(recursive) yapıya sahiptir • Matematiksel ifadelerden oluşan dili ele alalım: integer, +, * ve ( ) • Bir ifade(ifade) şunlardan biri olabilir: • Bir tamsayı • Bir ifade sonra “+” sonra başka bir ifade • Bir ifade sonra “*” sonra başka bir ifade • Bir ‘(‘ sonra bir ifade sonrabir ‘)’ • int , int + int , ( int + int) * int ifadelerdir
Programlama dilleri için gösterim • Alternatif gösterim: E --> int E --> E + E E --> E * E E --> ( E ) • Bu kuralları yeniden yazma kuralları olarak kabul edebiliriz • E ile başlarız ve E’yi her gördüğümüz yerde sağ taraftaki alternatiflerden birini yazarız • E --> E * E --> ( E ) * E --> ( E + E ) * E --> (int + int) * int
Gözlem • Bütün aritmetik ifadeler bir dizi yer değiştirmeyle elde edilebilir • Herhangi bir dizi yerdeğiştirme geçerli bir aritmetik ifade oluşturur • Bu aşağıdaki ifadeyi hiçbir şekilde elde edemeyeceğimizi de gösterir ( int ) ) Niçin? • Bu gösterim bir CFG’dir
CFG’ler • Bir CFG aşağıdakilerden oluşur: • Bir küme sonlandırıcı olmayan değişken(non-terminals-sonlandırıcı olmayanlar)N • Genel olarak büyük harfler kullanılır • Bir küme sonlandırıcı(terminals-sonlandırıcı olanlar)T • Genel olarak küçük harfler veya noktalama işaretleri kullanılır • Başlangıç sembolü(start symbol-başlangıç sembolü)S (non-terminal -sonlandırıcı olmayanlar) • Bir küme üretim kuralı(productions) • E Є Nve E -->e , veya E --> Y1 Y2 ... Yn YiЄ N U T
Örnekler:CFG Basit aritmetik ifadeler: E --> int E --> E + E E --> E * E E --> ( E ) • Birtane sonlandırıcı olmayan: E • Pek çok terminal: int, +, *, (, ) • Terminal denmesinin nedeni yerlerine başka bir şey yazılamamasından kaynaklanmaktadır • Genel olarak ilk üretim kuralında kullanılan sonlandırıcı olmayan sembol başlangıç sembolü olarak kabul edilir
Bir CFG dili Üretim kurallarını yerdeğiştirme kuralları olarak düşünebiliriz: X --> Y1 ... Yn demek Xdeğişkeninin Y1 ... Yn ile değiştirilebileceğini gösterir X -->e iseXdeğişkeninin silinebileceğini ya da boş stringle değiştirilebileceğini gösterir
Önemli Nokta • Başlangıç sembolü “S” içeren bir stringle başlanır • Stringteki sonlandırıcı olmayanX sembolleri üretim kurallarındaki bir sağ taraf ile değiştirilir X --> Y1 … Yn • Basamak (2) stringteki bütün semboller terminal olana kadar tekrarlanır
Bir CFG Dili(Devam.) Daha teorik bir gösterimle X1 … Xi-1 Xi Xi+1… Xn--> X1 … Xi-1Y1 … Ym Xi+1 … Xn şekline aşağıdaki üretim kuralı varsa dönüştürülebilir Xi--> Y1 … Ym
Bir CFG Dili(Devam.) Şu ifade X1 … Xn-->* Y1 … Ym eğer X1 … Xn--> … --> … --> Y1 … Ym O veya daha fazla basamakta elde edilebiliyorsa yazılabilir.
Bir CFG Dili(Devam.) Gbaşlangıç sembolü Solan bir CFG olsun. Bu Ggramerinden oluşacak dil şu şekilde gösterilir: { a1 … an | S -->* a1 … anve her aibir terminaldir }
Örnekler: • S --> 0ayrıca şöyle de yazılabilirS --> 0 | 1 S --> 1 Ürettiği dil { “0”, “1” } • Bu ne üretir?S --> 1 A A --> 0 | 1 • Bu ne üretir?S --> 1 A A --> 0 | 1 A • Bu ne üretir?S --> | ( S )
Aritmetik Örnek Basit aritmetik ifadeler: Dilin bazı elemanları:
Cool Örnek COOLdan bir parça:
Cool Örnek (Devam) Dilin bazı elemanları
Notlar CFG fikri önemli bir gelişmedir. Ancak: • Bir dile ait olup olmama “evet” veya “hayır” cevabı gerektirir • Fakat girdinin çözümleme ağacı da gereklidir • Hataları incelikle ele almalıdır • CFG yazabilecek uygulama aracı gereklidir (Örnek, bison)
Notlar • Gramerin biçimi önemlidir • Pek çok gramer aynı dili üretebilir • Araçlar gramere duyarlıdır. • Not: Düzgün Diller(Örnek, flex) için kullanılan araçlar da düzgün ifade biçimine duyarlıdır, ancak pratikte bu genelde bir sorun teşkil etmez
Türetmeler ve Çözümleme ağaçları Türetmebir üretim dizisidir S --> … --> … Bir türetme ağaç yapısı şeklinde gösterilebilir • Başlangıç sembolü ağacın kçküdür • X --> Y1 … Ynşeklindeki üretim kuralı için Y1, …, YnçocuklarıXdüğümünün altına eklenir
Türetme Örnek • Gramer • String
Türetme Detaylar (2) E E + E
Türetme Detaylar(3) E E + E E * E
Türetme Detaylar(4) E E + E E * E id
Türetme Detaylar(5) E E + E E * E id id
Türetme Detaylar(6) E E + E E * E id id id
Türetmelerle İlgili Notlar • Bir Çözümleme ağacında şunlar vardır: • Yapraklarda sonlandırıcılar(Terminaller) • Ara düğümlerde sonlandırıcı olmayan değişkenler(Non-terminaller) • Yapraklarda soldan sağa gidiş orijinal girdidir • Çözümleme ağacı işlemlerdeki ilişkileri gösterir, ancak girdi stringi göstermez!
Soldan(left-most)veSağdan(right-most) türetmeler • Örnek:soldan türetme • Her basamakta en soldaki değişken yerine başka bir ifade yerleştirilir • Sağdan türetme de benzer şekilde en sağdakinde değişiklik yapılarak elde edilir
Sağdan Türetme Detayları(2) E E + E
Sağdan Türetme Detayları(3) E E + E id
Sağdan Türetme Detayları(4) E E + E E * E id
Sağdan Türetme Detayları(5) E E + E E * E id id
Sağdan Türetme Detayları(6) E E + E E * E id id id
Türetmeler ve Çözümleme ağaçları • Her çözümleme ağacı için soldan ve sağdan bir türetme vardır • Aradaki fark sadece dalların eklenme sırasıdır
Türetmeler Özet • İlgilendiğimiz konu sadece şu soru değildir: s ЄL(G) • Aynı zamanda s için bir çözümleme ağacı gerekir • Bir türetme çözümleme ağacını tanımlar • Ancak bir çözümleme ağacı için pek çok türetme olabilir • Soldan ve sağdan türetmeler çözümleyici yazılımı için önemlidir