Sözdizimi Analizi: Derleyici Yukarıdan Aşağı ve Aşağıdan Yukarıya Ayrıştırma Türleri
Söz Dizimi Analizi Nedir?
Sözdizimi Analizi verilen giriş dizisinin, kuralların ve resmi dilbilgisinin yapısının doğrulanması açısından kontrol edildiği, derleyici tasarım sürecinin ikinci aşamasıdır. Sözdizimsel yapıyı analiz eder ve verilen girişin programlama dilinin doğru sözdiziminde olup olmadığını kontrol eder.
Derleyici Tasarım sürecinde Sözdizimi Analizi, Sözcüksel analiz aşamasından sonra gelir. Parse Tree veya Sözdizimi Ağacı olarak da bilinir. Parse Tree, dilin önceden tanımlanmış gramerinin yardımıyla geliştirilir. Sözdizimi analizcisi ayrıca verilen bir programın bağlamdan bağımsız bir gramer tarafından ima edilen kuralları yerine getirip getirmediğini kontrol eder. Eğer yerine getiriyorsa, ayrıştırıcı o kaynak programın ayrıştırma ağacını oluşturur. Aksi takdirde hata mesajları görüntüler.
Neden Söz Dizimi Çözümleyicisine ihtiyacınız var?
- Kodun gramer açısından geçerli olup olmadığını kontrol edin
- Sözdizimsel analizci, kuralları koda uygulamanıza yardımcı olur
- Her açılış desteğinin 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 mevcut olması gerekir
Önemli Sözdizimi Çözümleyicisi Terminolojisi
Sözdizimi analizi sürecinde kullanılan önemli terminolojiler:
- Hüküm: Bir cümle, bir alfabenin üzerindeki bir karakter grubudur.
- sözlük: Bir sözcük birimi, bir dilin en alt düzeydeki sözdizimsel birimidir (örneğin, toplam, başlangıç).
- Simgesi: Bir belirteç yalnızca bir sözcükbirim kategorisidir.
- Anahtar kelimeler ve ayrılmış kelimeler – 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ü kelimeleri – 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
- Ayırıcılar – Bazı sözdizimsel birimlerin başlangıcını veya sonunu işaret eden sözdizimsel bir öğedir. Bir ifade veya ifade gibi, “begin”…”end” veya {}.
- Karakter seti – ASCII, Unikod
- Tanımlayıcıları – Cümlenin okunabilirliğini azaltmanıza yardımcı olan uzunluk kısıtlamasıdır.
- Operator sembolleri – + ve – iki temel aritmetik işlemi gerçekleştirir.
- Dilin sözdizimsel unsurları
Neden Ayrıştırma'ya ihtiyacımız var?
Ayrıştırma ayrıca giriş dizesinin iyi biçimlendirilmiş olup olmadığını kontrol eder ve değilse reddeder.
Derleyici tasarımında ayrıştırıcının gerçekleştirdiği önemli görevler şunlardır:
- Her türlü Sözdizimi hatasını tespit etmenize yardımcı olur
- Hatanın oluştuğu 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ırmanın sözdizimi hatalarını bildirerek geçersiz metinleri reddetmesi gerekir
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ıya 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 yapısı kökten başlar ve ardından yapraklara doğru ilerler.
Yukarıdan aşağıya ayrıştırmanın iki türü şunlardır:
- Tahminli Ayrıştırma:
Tahmine dayalı ayrıştırma, belirli giriş 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. Bu ayrıştırma tekniğinde geri izleme bir sorun değildir. LL(1) Ayrıştırıcı olarak bilinir
- Özyinelemeli İniş Ayrıştırma:
Bu ayrıştırma tekniği, bir övgü ağacı oluşturmak için girdiyi yinelemeli olarak ayrıştırır. Dilbilgisindeki her bir terminal olmayan için bir tane olmak üzere birkaç küçük fonksiyondan oluşur.
Aşağıdan Yukarıya Ayrıştırma
Derleyici tasarımında aşağıdan yukarıya ayrıştırmada ayrıştırma ağacının yapımı izinle başlar ve daha sonra köküne doğru ilerler. Kaydırma-azaltma ayrıştırma olarak da adlandırılır. Derleyici tasarımında bu tür ayrıştırma, bazı yöntemlerin yardımıyla oluşturulur. yazılım araçları.
Hata – Kurtarma Yöntemleri
Sistem Yazılımında Ayrıştırmada Oluşan Yaygın Hatalar
- sözlük: Yanlış yazılan tanımlayıcının adı
- sözdizimsel: dengesiz parantez veya eksik noktalı virgül
- anlamsal: uyumsuz değer ataması
- mantıksal: Sonsuz döngü ve ulaşılamayan kod
Bir ayrıştırıcı programda bulunan herhangi bir hatayı tespit edip raporlayabilmelidir. Bu nedenle, bir hata oluştuğunda ayrıştırıcı bunu işleyebilmeli 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 uygulanabilen 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 ileriye doğru ayrıştırılmasına olanak tanır.
- Örneğin, eksik bir noktalı virgül eklemek, ifade modu kurtarma yönteminde gelir. Ancak ayrıştırma tasarımcısının bu değişiklikleri yaparken dikkatli olması gerekir çünkü yanlış bir düzeltme sonsuz bir döngüye yol açabilir.
Panik Modu kurtarma
- Ayrıştırıcının bir hatayla karşılaşması durumunda, bu mod ifadenin geri kalanını yoksayar ve hatalı girdiden ayırıcıya kadar olan girdiyi işlemez, noktalı virgül gibi. Bu basit bir hata kurtarma yöntemidir.
- Bu tür kurtarma yönteminde, ayrıştırıcı tek bir belirlenmiş senkronize belirteç grubu bulunana kadar giriş sembollerini tek tek reddeder. Senkronize belirteçler genellikle veya gibi sınırlayıcılar kullanır.
Cümle Düzeyinde Kurtarma
- Derleyici, belirteçleri ekleyerek veya silerek programı düzeltir. Bu, ayrıştırmaya olduğu yerden devam etmesine olanak tanır. Kalan giriş üzerinde düzeltme gerçekleştirir. Kalan girdinin önekini bir dizeyle 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ı üreten dilin gramerini genişletir. Ayrıştırıcı daha sonra bu yapı hakkında hata tanılaması gerçekleştirir.
Küresel Düzeltme
- Derleyici yanlış bir giriş dizesini işlerken mümkün olduğunca az sayıda değişiklik yapmalıdır. Yanlış giriş dizesi a ve dilbilgisi c verildiğinde, algoritmalar ilgili dize b için bir ayrıştırma ağacı arayacaktır. Bazı eklemeler, silmeler ve jetonlarda yapılan değişiklikler gibi, a'yı b'ye dönüştürmek için gereken jetonlar mümkün olduğu kadar 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 incelenmesi anlamına da gelir ve bu dosya morfoloji, fonoloji ve sözdizimini içerir. Pek çok sözdizimini tanımlama kapasitesine sahiptir. Programlama dilleri.
Form Dilbilgisi Kuralları
- Terminal olmayan sembol en az bir üretimin solunda görünmelidir.
- Hedef sembolü hiçbir zaman herhangi bir üretimin::= sağında görüntülenmemelidir
- LHS, RHS'de görünüyorsa bir kural özyinelemelidir
Gösterim Kuralları
Notasyonel kurallar sembolü, öğeyi köşeli parantez içine alarak gösterilebilir. Öğenin, parantez içine alınıp ardından bir yıldız işareti, { … }* eklenerek gösterilebilen, öğenin rastgele bir örnek dizisidir.
Tek kural içerisinde sembolü kullanabilen alternatifin seçimidir. Gerektiğinde parantez ([,]) içine alınabilir.
Terminal ve Terminal Olmayanlar olmak üzere iki tür Gösterim kuralı alanı
1.Terminaller:
- Alfabedeki a, b, c gibi küçük harfler,
- Opera+,-, * vb. gibi tor sembolleri.
- Parantez, hash, virgül gibi noktalama işaretleri
- 0, 1, …, 9 hane
- Kimlik veya if gibi kalın karakterli dizeler, tek bir terminal sembolünü temsil eden herhangi bir şey
2. Terminal olmayanlar:
- A, B, C gibi büyük harfler
- Küçük harfli italik adlar: ifade veya bazıları
Bağlamdan Bağımsız Dilbilgisi
CFG, türün en az bir üretimine sahip, sol özyinelemeli bir dilbilgisidir. Bağlamdan bağımsız bir dilbilgisindeki kurallar esas olarak yinelemelidir. Bir sözdizimi analizörü, belirli bir programın Bağlamdan bağımsız dilbilgisinin tüm kurallarını karşılayıp karşılamadığını kontrol eder. Karşılanırsa, bu kuralların sözdizimi çözümleyicileri o program için bir ayrıştırma ağacı oluşturabilir.
expression -> expression -+ term expression -> expression – term expression-> term term -> term * factor term -> expression/ factor term -> factor factor factor -> ( expression ) factor -> id
Dilbilgisi Türetme
Dilbilgisi türetme, başlangıç sembolünü dizeye dönüştüren bir dizi dilbilgisi kuralıdır. Bir türetme, dizenin dilbilgisi diline ait olduğunu kanıtlar.
En soldaki Türetme
Girişin cümle biçimi taranıp soldan sağa sırayla değiştirildiğinde, buna en soldan türetme denir. En soldaki türetmeyle türetilen cümle formuna sol cümle formu denir.
En Sağdan Türetme
En sağdaki türetme, girişi sağdan sola doğru sırayla tarayın ve üretim kurallarıyla değiştirin. En sağdan türetme olarak bilinir. En sağdaki türetmeden türetilen cümle formu, sağ cümle formu olarak bilinir.
Sözdizimi ve Sözcük Analizcisi
Sözdizimi Çözümleyicisi | Sözcük Analizcisi |
---|---|
Sözdizimi çözümleyicisi esas olarak dilin özyinelemeli yapılarıyla ilgilenir. | Sözcüksel analizör, sözdizimi analizörünün görevini kolaylaştırır. |
Sözdizimi çözümleyicisi, programlama dilindeki anlamlı yapıları tanımak için kaynak programdaki belirteçler üzerinde çalışır. | Sözcüksel çözümleyici, kaynak programdaki belirteci tanır. |
Sözcük analizcilerinden belirteçler biçiminde girdiler alır. | Tarafından sağlanan bir jetonun geçerliliğinden sorumludur.
sözdizimi analizörü |
Sözdizimi Çözümleyicilerini kullanmanın dezavantajları
- Bir jetonun geçerli olup olmadığını asla belirlemez
- Belirteç türü üzerinde gerçekleştirilen bir işlemin geçerli olup olmadığını belirlemenize yardımcı olmaz
- Belirtecin kullanılmadan önce bildirilmesine ve başlatılmasına karar veremezsiniz
ÖZET
- Sözdizimi analizi, derleyici tasarım sürecinin sözcüksel analizden sonra gelen ikinci aşamasıdır.
- Sözdizimsel analizci, kuralları koda uygulamanıza yardımcı olur
- Cümle, Sözcük Birimi, Belirteç, Anahtar Kelimeler ve ayrılmış kelimeler, Gürültülü kelimeler, Yorumlar, Sınırlayıcılar, Karakter seti, Tanımlayıcılar, Derleyici yapımında Sözdizimi Analizinde kullanılan bazı önemli terimlerdir.
- Ayrıştırma, giriş dizesinin iyi biçimlendirilmiş olup olmadığını 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 ortaya çıkan bazı yaygın hatalardır.
- Dilbilgisi, bir dili tanımlayan bir dizi yapısal kuraldır
- Notasyon kuralları sembolü, öğeyi köşeli parantez içine alarak gösterilebilir
- CFG, şu türden en az bir üretime sahip, sol özyinelemeli bir dilbilgisidir.
- Dilbilgisi türetme, başlangıç sembolünü dizeye dönüştüren bir dizi dilbilgisi kuralıdır.
- Sözdizimi çözümleyicisi temel olarak dilin özyinelemeli yapılarıyla ilgilenirken, sözcüksel çözümleyici sözdizimi çözümleyicisinin görevini kolaylaştırır. DBMS
- Sözdizimi analiz yönteminin dezavantajı, bir belirtecin geçerli olup olmadığını asla belirleyememesidir.