1 / 43

Sözdizimsel Çözümlemeye Giriş

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)

zia
Download Presentation

Sözdizimsel Çözümlemeye Giriş

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sözdizimsel Çözümlemeye Giriş

  2. Taslak • Düzgün Diller • Sözdizimsel Analiz Anahatarı • Context-free gramerler (CFG’s) • Türetmeler(türetmeler)

  3. 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

  4. 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}

  5. Çözümleyicinin fonksiyonu • Girdi: Sözcüksel analizden çıkan bir dizi token • Çıktı: Programın çözümleme ağacı(Çözümleme ağacı)

  6. 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ı

  7. Sözcüksel Analizci ile karşılaştırma

  8. Çö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

  9. 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

  10. 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

  11. 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

  12. 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

  13. Ö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

  14. 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

  15. Ö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

  16. 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

  17. 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.

  18. 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 }

  19. Ö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 )

  20. Aritmetik Örnek Basit aritmetik ifadeler: Dilin bazı elemanları:

  21. Cool Örnek COOLdan bir parça:

  22. Cool Örnek (Devam) Dilin bazı elemanları

  23. 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)

  24. 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

  25. 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

  26. Türetme Örnek • Gramer • String

  27. Türetme Örnek (Devam)

  28. Türetme Detaylar (1) E

  29. Türetme Detaylar (2) E E + E

  30. Türetme Detaylar(3) E E + E E * E

  31. Türetme Detaylar(4) E E + E E * E id

  32. Türetme Detaylar(5) E E + E E * E id id

  33. Türetme Detaylar(6) E E + E E * E id id id

  34. 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!

  35. 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

  36. Sağdan Türetme Detayları (1) E

  37. Sağdan Türetme Detayları(2) E E + E

  38. Sağdan Türetme Detayları(3) E E + E id

  39. Sağdan Türetme Detayları(4) E E + E E * E id

  40. Sağdan Türetme Detayları(5) E E + E E * E id id

  41. Sağdan Türetme Detayları(6) E E + E E * E id id id

  42. 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

  43. 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

More Related