Derleyici Tasarımında Örnekle Sözcüksel Analiz (Analizör)

⚡ Akıllı Özet

Sözcük analizi, derleyici tasarımının ilk aşamasıdır; bu aşamada bir sözcük çözümleyici, kaynak karakter akışını anlamlı belirteçlere dönüştürür. Boşlukları ve yorumları kaldırır, belirteçleri sembol tablosuna kaydeder ve sözcük hatalarını ayrıştırıcıya bildirir.

  • 🔤 Birinci Derleme Aşaması: Sözcük analizi, kaynak karakterleri okur ve bunları bir belirteç dizisine dönüştürür.
  • 🧩 Anahtar terimler: Bir leksik birim, eşleşen bir karakter dizisidir; bir belirteç (token) onun kategorisidir ve bir kalıp (pattern) kuralı tanımlar.
  • 🏗️ Nasıl Çalışır: Ayrıştırıcı "sonraki belirteci al" isteğinde bulunur ve tarayıcı isteğe bağlı olarak belirteçleri döndürür.
  • 🧹 Temizlik Görevi: Söz dizimi çözümleyici, boşlukları ve yorumları kaldırır, makroları genişletir ve sembol tablosunu doldurur.
  • ⚠️ Sözcüksel Hatalar: Geçersiz karakterler veya yanlış yazılmış tanımlayıcılar hatalara yol açar; bu hatalar silme veya yer değiştirme gibi kurtarma teknikleriyle giderilebilir.
  • 🔀 Sözcük çözümleyici (Lexer) ve ayrıştırıcı (Parser): Sözcük çözümleyici (lexer) belirteçleri tanımlar; ayrıştırıcı (parser) ise sözdizimi analizi sırasında bir ayrıştırma ağacı oluşturur.

Sözcük Analizi

Sözcüksel Analiz Nedir?

Sözcük Analizi derleyici tasarımının ilk aşamasıdır. Bir Lexer, cümleler şeklinde yazılmış değiştirilmiş kaynak kodunu alır. Başka bir deyişle, bir karakter dizisini bir simge dizisine dönüştürmenize yardımcı olur. Sözcüksel analizci bu sözdizimini bir dizi simgeye böler. Kaynak kodunda yazılı olan fazladan boşlukları veya yorumları kaldırır.

Derleyici tasarımında Sözcüksel Analiz yapan programlara sözcüksel çözümleyiciler veya sözlükçüler adı verilir. Bir lexer tokenizer veya tarayıcı içerir. Sözcük çözümleyici belirtecin geçersiz olduğunu tespit ederse bir hata oluşturur. Derleyici tasarımında Sözcüksel Çözümleyicinin rolü, kaynak koddan karakter akışlarını okumak, yasal belirteçleri kontrol etmek ve talep edildiğinde verileri sözdizimi çözümleyicisine iletmektir.

Örnek E-posta

How Pleasant Is The Weather?

Bu Sözcüksel Analiz örneğine bakın; Burada Ne Kadar Hoş, Hava, Hava, diye beş kelime olduğunu rahatlıkla anlayabiliriz. Ayırıcıları, boşlukları ve noktalama işaretini tanıyabildiğimiz için bu bizim için çok doğal.

 HowPl easantIs Th ewe ather?

Şimdi bu örneği inceleyin, bunu da okuyabiliriz. Ancak seperatörler Tek Yerlere konulduğu için biraz zaman alacaktır. Bu hemen başınıza gelen bir şey değil.

Temel Terminolojiler

Sözlük birimi nedir?

Bir sözcük birimi, bir belirtecin eşleşen düzenine göre kaynak programa dahil edilen bir karakter dizisidir. Bir belirtecin örneğinden başka bir şey değil.

Jeton nedir?

Derleyici tasarımındaki belirteçler, kaynak programdaki bir bilgi birimini temsil eden karakter dizisidir.

Desen Nedir?

Desen, belirteç tarafından kullanılan bir açıklamadır. Belirteç olarak kullanılan bir anahtar kelime durumunda, kalıp bir karakter dizisidir.

Sözcük Analizcisi Architecture: Tokenlar nasıl tanınır?

Sözlüksel analizin asıl görevi koddaki giriş karakterlerini okumak ve token üretmektir.

Sözcüksel analizör programın tüm kaynak kodunu tarar. Her jetonu tek tek tanımlar. Tarayıcılar genellikle yalnızca bir ayrıştırıcı tarafından talep edildiğinde belirteçler üretmek üzere uygulanır. Derleyici tasarımında belirteçlerin tanınması şu şekilde çalışır:

Sözcük Analizcisi Archidoku
Sözcük Analizcisi Archidoku
  1. “Sonraki jetonu al” ayrıştırıcıdan sözcüksel analizciye gönderilen bir komuttur.
  2. Bu komutu aldıktan sonra sözcüksel analizci, bir sonraki belirteci bulana kadar girişi tarar.
  3. Belirteci Ayrıştırıcıya döndürür.

Lexical analyzer bu belirteçleri oluştururken boşlukları ve yorumları atlar. Herhangi bir hata mevcutsa, Lexical analyzer bu hatayı kaynak dosya ve satır numarasıyla ilişkilendirecektir.

Sözcüksel analizcinin rolleri

Sözcüksel analizör aşağıda verilen görevleri yerine getirir:

  • Simge tablosunda belirtecin tanımlanmasına yardımcı olur
  • Kaynak programdaki beyaz boşlukları ve yorumları kaldırır
  • Hata mesajlarını kaynak programla ilişkilendirir
  • Kaynak programda bulunması durumunda makroları genişletmenize yardımcı olur
  • Kaynak programdan giriş karakterlerini oku

Sözcüksel Analiz Örneği, Belirteçler, Belirteç Olmayanlar

Lexical Analyzer'a verilen aşağıdaki kodu göz önünde bulundurun

#include <stdio.h>
    int maximum(int x, int y) {
        // This will compare 2 numbers
        if (x > y)
            return x;
        else {
            return y;
        }
    }

Oluşturulan Token örnekleri

Sözcükbirimi Simge
int Anahtar kelime
maksimum Tanımlayıcı
( Kullanım
int Anahtar kelime
x Tanımlayıcı
, Kullanım
int Anahtar kelime
Y Tanımlayıcı
) Kullanım
{ Kullanım
If Anahtar kelime

Belirteçsiz Örnekler

Menşei Örnekler
Yorum Yap // Bu 2 sayıyı karşılaştıracak
Önişlemci direktifi #Dahil etmek
Önişlemci direktifi #define NUMS 8,9
Makro SAYILAR
Beyaz boşluk /n /b /t

Sözcük Hataları

Herhangi bir geçerli simgeye taranması mümkün olmayan bir karakter dizisi sözcüksel bir hatadır. Sözcüksel hatayla ilgili önemli gerçekler:

  • Sözcüksel hatalar çok yaygın değildir ancak bir tarayıcı tarafından yönetilmesi gerekir.
  • Tanımlayıcıların, operatörlerin ve anahtar kelimenin yanlış yazılışı sözcüksel hata olarak kabul edilir
  • Genellikle sözcüksel bir hata, çoğunlukla bir belirtecin başında bazı yasa dışı karakterlerin ortaya çıkmasından kaynaklanır.

Sözcük Analizcisi'nde Hata Kurtarma

Burada en yaygın birkaç hata kurtarma tekniği verilmiştir:

  • Kalan girişten bir karakteri kaldırır
  • Panik modunda, iyi biçimlendirilmiş bir simgeye ulaşana kadar ardışık karakterler her zaman göz ardı edilir.
  • Eksik karakteri kalan girişe ekleyerek
  • Bir karakteri başka bir karakterle değiştirme
  • İki seri karakterin transpoze edilmesi

Sözcük Analizcisi ve Ayrıştırıcı

Sözcük Analizcisi Ayrıştırıcı
Tarama Girişi programı Sözdizimi analizi gerçekleştirin
Jetonları Tanımlayın Karın kası oluşturuntrackodun t gösterimi
Belirteçleri Sembol Tablosuna Ekle Sembol tablosu girişlerini güncelle
Sözcüksel hatalara neden oluyor Kaynak kodunun ayrıştırma ağacını oluşturur

Neden Sözcüksel ve Ayrıştırıcıyı ayırmalısınız?

  • Tasarımın basitliği: İstenmeyen belirteçleri ortadan kaldırarak sözcüksel analiz ve sözdizimi analizi sürecini kolaylaştırır.
  • Derleyici verimliliğini artırmak için: Derleyici verimliliğini artırmanıza yardımcı olur
  • Uzmanlaşma: sözcüksel analiz sürecini geliştirmek için özel teknikler uygulanabilir
  • Taşınabilirlik: yalnızca tarayıcının dış dünyayla iletişim kurması gerekir
  • Daha yüksek taşınabilirlik: giriş cihazına özgü özellikler yalnızca sözlükçüyle sınırlıdır

Sözcüksel analizin avantajları

  • Sözcüksel analiz yöntemi, derlenmiş bir ikili çalıştırılabilir kod oluşturmak için bir programcının kodundan ayrıştırılan verileri kullanabilen derleyiciler gibi programlar tarafından kullanılır.
  • Web tarayıcıları tarafından, ayrıştırılmış verilerin yardımıyla bir web sayfasını biçimlendirmek ve görüntülemek için kullanılır. JavaSenaryo, HTML, CSS
  • Ayrı bir sözcük analizörü, görev için özelleştirilmiş ve potansiyel olarak daha verimli bir işlemci oluşturmanıza yardımcı olur

Sözcüksel analizin dezavantajı

  • Kaynak programı okumak ve onu belirteçler biçiminde bölümlemek için önemli ölçüde zaman harcamanız gerekir.
  • PEG veya EBNF kurallarına kıyasla bazı düzenli ifadelerin anlaşılması oldukça zordur
  • Lexer'ı ve belirteç açıklamalarını geliştirmek ve hata ayıklamak için daha fazla çaba gerekiyor
  • Lexer tablolarını oluşturmak ve belirteçleri oluşturmak için ek çalışma zamanı yükü gerekir

SSS

Popüler araçlar arasında Lex ve açık kaynaklı sürümü Flex yer almaktadır. Token kalıplarını normal ifadeler olarak yazarsınız ve araç, tarayıcı kaynak kodunu otomatik olarak oluşturarak tokenleştiriciyi elle kodlama zahmetinden sizi kurtarır.

Sözcük çözümleyici, her bir belirteci bir düzenli ifade olarak tanımlar ve eşleştirmeyi sonlu otomatlar kullanarak gerçekleştirir. Karakterleri soldan sağa tarar ve en uzun geçerli eşleşmeyi bir sonraki belirteç olarak yayar.

Sembol tablosu, sözcük çözümleyicisinin tanımlayıcıları ve ad ve tür gibi özelliklerini sakladığı bir veri yapısıdır. Later Derleyici aşamaları onu okur ve günceller. track değişken ve fonksiyon.

Yapay zeka, örneklerden belirteç düzenli ifadeleri üretebilir, belirsiz veya örtüşen ifadeleri tespit edebilir.ping Desenleri inceler ve tarayıcı hatalarını açıklar. Bu, yeni bir dil veya DSL için sözcük çözümleyici oluşturmayı ve hata ayıklamayı hızlandırır.

Tam olarak değil. Derleyiciler, kodu belirteçlere ayırmak için sabit kurallar ve sonlu otomatlar kullanırken, yapay zeka modelleri metni istatistiksel alt kelime belirteçlerine ayırır. Amaçlar farklıdır: kesin ayrıştırma ile esnek dil anlama.

Bu yazıyı şu şekilde özetleyin: