Sözdizimi Analizi nedir?
Sözdizimi Analizi , verilen girdi dizesinin kuralların ve biçimsel dilbilgisinin yapısının doğrulanması için kontrol edildiği derleyici tasarım sürecinin ikinci aşamasıdır. Sözdizimsel yapıyı analiz eder ve verilen girdinin programlama dilinin doğru sözdiziminde olup olmadığını kontrol eder.
Derleyici Tasarımında Sözdizimi Analizi, Sözcüksel analiz aşamasından sonra gelir. Ayrıştırma Ağacı veya Sözdizimi Ağacı olarak da bilinir. Ayrıştırma Ağacı, dilin önceden tanımlanmış dilbilgisi yardımıyla geliştirilmiştir. Sözdizimi çözümleyicisi, belirli bir programın bağlamdan bağımsız bir dilbilgisi tarafından ima edilen kuralları yerine getirip getirmediğini de kontrol eder. Eğer tatmin ederse, ayrıştırıcı o kaynak programın ayrıştırma ağacını oluşturur. Aksi takdirde, hata mesajları gösterecektir.
Bu eğitimde öğreneceksiniz
- Sözdizimi Çözümleyicisine neden ihtiyacınız var?
- Önemli Sözdizimi Çözümleyicisi Terminolojisi
- Neden Ayrıştırmaya ihtiyacımız var?
- Ayrıştırma Teknikleri
- Hata - Kurtarma Yöntemleri
- Dilbilgisi:
- Gösterim Kuralları
- Bağlamdan Bağımsız Dilbilgisi
- Dilbilgisi Türetme
- Sözdizimi ve Sözcüksel Analiz Aracı
- Sözdizimi Çözümleyicileri kullanmanın dezavantajları
Sözdizimi Çözümleyicisine neden ihtiyacınız var?
- Kodun dilbilgisi açısından geçerli olup olmadığını kontrol edin
- Sözdizimsel analizör, koda kurallar uygulamanıza yardımcı olur
- Her açılış ayracının karşılık gelen bir kapanış bakiyesine sahip olduğundan emin olmanıza yardımcı olur
- Her bildirimin bir türü vardır ve türün var olması gerekir
Önemli Sözdizimi Çözümleyicisi Terminolojisi
Sözdizimi analizi sürecinde kullanılan önemli terminolojiler:
- Cümle: Bir cümle, bazı alfabelerin üzerindeki bir karakter grubudur.
- Sözcük birimi, bir dilin en düşük düzeydeki sözdizimsel birimidir (örneğin, toplam, başlangıç).
- Belirteç: Belirteç, yalnızca bir sözcük birimi kategorisidir.
- Anahtar sözcükler ve ayrılmış sözcükler - Bir ifadenin sözdiziminin sabit bir parçası olarak kullanılan bir tanımlayıcıdır. Değişken adı veya tanımlayıcı olarak kullanamayacağınız ayrılmış bir kelimedir.
- Gürültülü sözcükler - Cümlenin okunabilirliğini artırmak için bir ifadeye eklenen gürültü sözcükleri isteğe bağlıdır.
- Yorumlar - Dokümantasyonun çok önemli bir parçasıdır. Çoğunlukla / * * / veya // Boşluk (boşluk) ile görüntülenir
- Sınırlayıcılar - Bazı sözdizimsel birimlerin başlangıcını veya sonunu işaretleyen sözdizimsel bir öğedir. Bir ifade veya ifade gibi, "başla"… "" bitiş "veya {}.
- Karakter kümesi - ASCII, Unicode
- Tanımlayıcılar - Cümlenin okunabilirliğini azaltmanıza yardımcı olan uzunlukla ilgili bir kısıtlamadır.
- Operatör sembolleri - + ve - iki temel aritmetik işlemi gerçekleştirir.
- Dilin sözdizimsel unsurları
Neden Ayrıştırmaya ihtiyacımız var?
Ayrıştırma ayrıca girdi dizesinin iyi biçimlendirilip biçimlendirilmediğini kontrol eder ve değilse reddeder.
Derleyici tasarımında ayrıştırıcı tarafından gerçekleştirilen önemli görevler şunlardır:
- Her tür Sözdizimi hatasını tespit etmenize yardımcı olur
- Hatanın meydana geldiği konumu bulun
- Hatanın açık ve doğru açıklaması.
- Devam etmek ve koddaki diğer hataları bulmak için bir hatadan kurtarma.
- "Doğru" programların derlenmesini etkilememelidir.
- Ayrıştırma, sözdizimi hatalarını bildirerek geçersiz metinleri reddetmelidir
Ayrıştırma Teknikleri
Ayrıştırma teknikleri iki farklı gruba ayrılır:
- Yukarıdan Aşağıya Ayrıştırma,
- Aşağıdan Yukarı Ayrıştırma
Yukarıdan Aşağıya Ayrıştırma:
Yukarıdan aşağıya ayrıştırmada ayrıştırma ağacının inşası kökten başlar ve ardından yapraklara doğru ilerler.
Yukarıdan aşağıya iki tür ayrıştırma vardır:
- Tahmine Dayalı Ayrıştırma:
Tahmine dayalı ayrıştırma, belirli girdi dizesini değiştirmek için hangi üretimin kullanılması gerektiğini tahmin edebilir. Tahmine dayalı ayrıştırıcı, sonraki giriş sembollerine işaret eden ileriye dönük noktayı kullanır. Geriye dönük izleme, bu ayrıştırma tekniğiyle ilgili bir sorun değildir. LL (1) Ayrıştırıcı olarak bilinir
- Yinelemeli İniş Ayrıştırma:
Bu ayrıştırma tekniği, girdiyi özyinelemeli olarak ayrıştırarak bir prase ağacı oluşturur. Dilbilgisindeki her terminal olmayan için bir tane olmak üzere birkaç küçük işlevden oluşur.
Aşağıdan Yukarı Ayrıştırma:
Derleyici tasarımında aşağıdan yukarıya ayrıştırmada, ayrıştırma ağacının inşası izinle başlar ve ardından köküne doğru işler. Aynı zamanda kaydırma-azaltma ayrıştırma olarak da adlandırılır. Derleyici tasarımında bu tür ayrıştırma, bazı yazılım araçlarının kullanılmasıyla oluşturulur.
Hata - Kurtarma Yöntemleri
Sistem Yazılımında Ayrıştırmada oluşan Yaygın Hatalar
- Sözcüksel : Yanlış yazılmış bir tanımlayıcının adı
- Sözdizimi : dengesiz parantez veya eksik bir noktalı virgül
- Anlamsal : uyumsuz değer tahsisi
- Mantıksal : Sonsuz döngü ve erişilemez kod
Ayrıştırıcı, programda bulunan herhangi bir hatayı algılayıp raporlayabilmelidir. Böylece, bir hata oluştuğunda ayrıştırıcı. Bunu idare edebilmeli ve kalan girdiyi ayrıştırmaya devam edebilmelidir. Bir program, çeşitli derleme süreci aşamalarında aşağıdaki hata türlerine sahip olabilir. Ayrıştırıcıda uygulanabilecek beş yaygın hata kurtarma yöntemi vardır.
Bildirim modu kurtarma
- Ayrıştırıcının bir hatayla karşılaşması durumunda, düzeltici adımlar atmanıza yardımcı olur. Bu, geri kalan girdilerin ve durumların önceden ayrıştırılmasına izin verir.
- Örneğin, eksik bir noktalı virgül eklemek, ifade modunda kurtarma yönteminde gelir. Ancak, tek bir yanlış düzeltme sonsuz döngüye yol açabileceğinden, ayrıştırma tasarımcısının bu değişiklikleri yaparken dikkatli olması gerekir.
Panik Modu kurtarma
- Ayrıştırıcının bir hatayla karşılaşması durumunda, bu mod ifadenin geri kalanını yok sayar ve girdiyi noktalı virgül gibi, hatalı girdiden sınırlayıcıya işlemez. Bu basit bir hata kurtarma yöntemidir.
- Bu tür kurtarma yönteminde, ayrıştırıcı, tek bir atanmış senkronizasyon simgeleri bulunana kadar giriş simgelerini tek tek reddeder. Senkronizasyon simgeleri genellikle veya gibi sınırlayıcıları kullanır.
Cümle Düzeyinde Kurtarma:
- Derleyici, jeton ekleyerek veya silerek programı düzeltir. Bu, bulunduğu yerden ayrıştırmaya devam etmesini sağlar. Kalan girişte düzeltme yapar. Kalan girdinin önekini bazı dizelerle değiştirebilir, bu da ayrıştırıcının işleme devam etmesine yardımcı olur.
Hata Üretimleri
- Hata üretim kurtarma, hatalı yapıları oluşturan dil için dilbilgisini genişletir. Ayrıştırıcı daha sonra bu yapı hakkında hata teşhisi gerçekleştirir.
Küresel Düzeltme:
- Derleyici, yanlış bir girdi dizesini işlerken olabildiğince az sayıda değişiklik yapmalıdır. Yanlış girdi dizesi a ve dilbilgisi c verildiğinde, algoritmalar ilgili dizge b için bir ayrıştırma ağacı arayacaktır. An'ı b'ye dönüştürmek için gereken simgelerden yapılan bazı eklemeler, silme ve değişiklikler gibi, mümkün olduğunca azdır.
Dilbilgisi:
Dilbilgisi, bir dili tanımlayan bir dizi yapısal kuraldır. Dilbilgisi herhangi bir cümleye yapı atar. Bu terim aynı zamanda bu kuralların incelenmesine de atıfta bulunur ve bu dosya morfoloji, fonoloji ve sözdizimi içerir. Programlama dillerinin sözdizimlerinin çoğunu tanımlayabilir.
Form Dilbilgisi Kuralları
- Terminal olmayan sembol, en az bir üretimin solunda görünmelidir
- Hedef sembolü asla herhangi bir üretimin :: = işaretinin sağında gösterilmemelidir
- Bir kural, RHS'sinde LHS görünüyorsa yinelemelidir
Gösterim Kuralları
Gösterim kuralları sembolü, öğe köşeli parantez içine alınarak gösterilebilir. Bu, öğenin köşeli parantez içine alınması ve ardından bir yıldız işareti {…} * ile gösterilebilen rastgele bir örnek dizisidir.
Tek kural içinde sembolü kullanabilecek alternatifin bir seçimidir. Gerektiğinde parantez ([,]) içine alınabilir.
İki tür İşaretleme kuralları alanı Terminal ve Terminal Olmayanlar
1. Terminaller:
- Alfabedeki a, b, c gibi küçük harfler,
- +, -, * vb. Operatör sembolleri
- Parantez, kare, virgül gibi noktalama işaretleri
- 0, 1,…, 9 basamak
- İd veya if gibi kalın dizeler, tek bir terminal sembolünü temsil eden herhangi bir şey
2. Sonsuzlar:
- A, B, C gibi büyük harfler
- Küçük italik isimler: ifade veya bazı
Bağlamdan Bağımsız Dilbilgisi
Bir CFG, türün en az bir üretimine sahip, sol yinelemeli bir dilbilgisidir. Bağlamdan bağımsız bir gramerdeki kurallar esas olarak yinelemelidir. Bir sözdizimi çözümleyicisi, belirli bir programın Bağlamdan bağımsız dilbilgisinin tüm kurallarını karşılayıp karşılamadığını kontrol eder. Bu kurallara uyuyorsa, sözdizimi çözümleyicileri o program için bir ayrıştırma ağacı oluşturabilir.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Dilbilgisi Türetme
Dilbilgisi türetme, başlangıç sembolünü dizeye dönüştüren bir gramer kuralı dizisidir. Bir türetme, dizenin dilbilgisinin diline ait olduğunu kanıtlar.
En soldaki Türetme
Duygusal girdi biçimi tarandığında ve soldan sağa sırayla değiştirildiğinde, en soldaki türetme olarak bilinir. En soldaki türetme tarafından türetilen duygusal biçim, sol-cümle biçimi olarak adlandırılır.
En Sağdaki Türetme
En sağdaki türetme taraması ve girdiyi, sağdan sola doğru üretim kuralları ile değiştir. En sağdaki türetme olarak bilinir. En sağdaki türetmeden türetilen duygusal biçim, sağ-cümle biçimi olarak bilinir.
Sözdizimi ve Sözcüksel Analiz Aracı
Sözdizimi Çözümleyicisi |
Sözcüksel Analizör |
Sözdizimi çözümleyicisi esas olarak dilin özyinelemeli yapılarıyla ilgilenir. |
Sözcüksel çözümleyici, sözdizimi çözümleyicisinin görevini kolaylaştırır. |
Sözdizimi çözümleyicisi, programlama dilinde anlamlı yapıları tanımak için bir kaynak programdaki belirteçler üzerinde çalışır. |
Sözcüksel analizci, bir kaynak programdaki belirteci tanır. |
Sözcük çözümleyicilerinden belirteçler biçiminde girdiler alır. |
Tarafından sağlanan bir jetonun geçerliliğinden sorumludur sözdizimi çözümleyicisi |
Sözdizimi Çözümleyicileri kullanmanın dezavantajları
- Bir jetonun geçerli olup olmadığını asla belirlemez
- Bir belirteç türü üzerinde gerçekleştirilen bir işlemin geçerli olup olmadığını belirlemenize yardımcı olmaz
- Kullanılmadan önce belirtecin bildirilip başlatılmasına karar veremezsiniz
Özet
- Sözdizimi analizi, sözcüksel analizden sonra gelen derleyici tasarım sürecinin ikinci aşamasıdır.
- Sözdizimsel analizör, koda kurallar uygulamanıza yardımcı olur
- Cümle, Lexeme, Belirteç, Anahtar Sözcükler ve ayrılmış sözcükler, Gürültü sözcükleri, Yorumlar, Sınırlayıcılar, Karakter kümesi, Tanımlayıcılar Derleyici yapısında Sözdizimi Analizinde kullanılan bazı önemli terimlerdir.
- Ayrıştırma, giriş dizesinin iyi biçimlendirildiğini kontrol eder ve değilse reddeder
- Ayrıştırma teknikleri iki farklı gruba ayrılır: Yukarıdan Aşağıya Ayrıştırma, Aşağıdan Yukarıya Ayrıştırma
- Sözcüksel, Sözdizimsel, Anlamsal ve mantıksal, ayrıştırma yöntemi sırasında meydana gelen bazı yaygın hatalardır
- Dilbilgisi, bir dili tanımlayan bir dizi yapısal kuraldır
- Gösterim kuralları sembolü, öğe köşeli parantez içine alınarak gösterilebilir.
- Bir CFG, en az bir türün üretimine sahip olan sol yinelemeli bir dilbilgisidir.
- Dilbilgisi türetme, başlangıç sembolünü dizeye dönüştüren bir gramer kuralı dizisidir.
- Sözdizimi çözümleyicisi esas olarak dilin yinelemeli yapılarıyla ilgilenirken, sözcüksel çözümleyici DBMS'deki sözdizimi çözümleyicisinin görevini kolaylaştırır.
- Sözdizimi çözümleyici yönteminin dezavantajı, bir belirtecin geçerli olup olmadığını asla belirlememesidir.