Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Sözcüksel Çözümleme/Analiz (Lexical Analysis)

Benzer bir sunumlar


... konulu sunumlar: "Sözcüksel Çözümleme/Analiz (Lexical Analysis)"— Sunum transkripti:

1 Sözcüksel Çözümleme/Analiz (Lexical Analysis)

2 Programlama Dillerinin Gerçekleştirimleri (Implementation) Programlama dillerinin gerçekleştirimleri genellikle iki farklı yolla olur: Yorumlayıcılar (Interpreter) bir programın az veya hiç ön işleme yapılmadan, platformdan bağımsız olarak çalıştırılmasını sağlar. Derleyiciler (Compiler) programı yoğun bir ön işlemeden geçirir ve 2-20 kat arası daha hızlı çalışmayı sağlar. Platforma özgü kod üretirler. Bazı dillerde bu iki yolun bir kombinasyonu da (hibrit) kullanılır.

3 Otomatik Çeviri Paradigması analiz üretim Kaynak Dil Hedef Dil Ara Dil transfer doğrudan çeviri

4 Modern Derleyiciler Günümüzde derleyiciler de otomatik çeviri paradigmasına uygun olarak geliştirilirler. Bu sebeple iki ana bileşenden oluşurlar: Analiz işlemleri için kullanılan ön uç (front end), kaynak programlama dilini işler ve bundan bir ara gösterim elde eder. Üretim aşaması ise arka uç (back end) bileşeninde kodun optimizasyonu ve hedef dile dönüştürülmesiyle gerçekleşir. Hedef dil genelde assembly olur. Böylece yüksek seviye bir programlama dilinin makine düzeyine indirgenmesi sağlanır.

5 Bir Derleyicinin Genel Yapısı Hedef Dil Semantic Analyzer Syntax Analyzer (Parser) Lexical Analyzer (Lexer) (Tokenizer) Ön Uç Kod Optimizasyonu Hedef Dil Üreticisi Arka Uç Ara Kod Üreticisi Ara Kod Kaynak Dil

6 Derleme Örneği Hedef Dil Semantic Analyzer Syntax Analyzer Lexical Analyzer Kod Optimizasyonu Hedef Dil Üreticisi Ara Kod Üreticisi Ara Kod Kaynak Dil Kaynak Dil: cur_time = start_time + cycles * 60 Lexical Analiz: ID(1) ASSIGN ID(2) ADD ID(3) MULT INT(60) Sözdizim Analizi: ASSIGN ID(1) ADD ID(2) MULT ID(3) INT(60) Anlamsal Analiz: ASSIGN ID(1) ADD ID(2) MULT ID(3) int2real INT(60)

7 Derleme Örneği Adım 1 : temp1 = 60.0 temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 Adım 2 : temp2 = id3 * 60.0 temp3 = id2 + temp2 id1 = temp3 Adım 3 : temp2 = id3 * 60.0 id1 = id2 + temp2 Optimize Edilmiş Kod: temp1 = id3 * 60.0 id1 = id2 + temp1 Hedef Dil: MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 Hedef Dil Semantic Analyzer Syntax Analyzer Lexical Analyzer Kod Optimizasyonu Hedef Dil Üreticisi Ara Kod Üreticisi Ara Kod Kaynak Dil Ara Kod: temp1 = int2real(60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 Optimizasyon:

8 Lexical Analiz (1) if (i==j); z=1; else; z=0; endif; Yukarıdaki kod parçası bizim için anlamlı ifadelerden oluşsa da bilgisayar için aşağıdaki gibi bir karakter katarından başka bir şey ifade etmez. if_(i==j);\n\tz=1; \nelse; \tz=0;\nendif;

9 Lexical Analiz (2) Yüksek seviyeli bir dille yazılan kodun çalıştırılabilmesi için en düşük seviyede bilgisayarın işleyebileceği komutlar dizisi haline getirilmesi gereklidir. Bu sebeple kaynak kodu oluşturan karakter katarı anlamlı alt parçalara ayrıştırılmalıdır. Alt parçalara token, bunları ayrıştırma işlemine de lexical analiz denir. Lexical analiz işleminin çıktısı olan tokenlar bir sonraki aşama olan sözdizimsel analiz bileşenine aktarılır.

10 Lexical Analiz (3) Token sözdizimsel bir kategori belirtir. Bu kategoriler doğal diller için “isim”, “sıfat”, “fiil” vb. olabilirken, programlama dilleri için “matematiksel sembol” veya “anahtar kelime” gibi alt ifadeler olurlar. Token belirten bir alt karakter katarı lexeme olarak adlandırılır. Programlama dili içinde kullanılması mümkün olan tüm lexemeler tanımlanırken örüntüler (pattern) kullanılır. Örüntüler düzenli ifadeler (regular expressions) kullanılarak tanımlanır. Bu aşamada düzenli ifadelerin kullanılmasının sebebi işlenen karakter katarı içinde kabul edilebilir bir token bulabilmenin bazen geriye dönük arama da gerektirebilmesidir.

11 Lexical Analiz (4) Bir lexical analiz aracı şu 3 şeyi yapabilmelidir: 1.Bütün boşlukları ve açıklamaları temizlemeli, 2.Karakter katarı içindeki tüm tokenlar bulunmalı, 3.Bulunan token için lexeme ve bulunduğu satır numarası gibi özellikler döndürülmelidir. sum=3+2; Lexeme Token sum IDENTIFIER = ASSIGN_OP 3 NUMBER + ADD_OP 2 NUMBER ; SEMICOLON

12 Düzenli İfadeler Sonlu durum otomatları (FSA) ile tanımlanabilen dilleri ifade etmede kullanılırlar. Eğer A bir düzenli ifade ise, L(A) bu ifade ile tanımlanan dildir. L(“if”|”then”|”else”) dili sadece “if”, “then” ve “else” ifadelerini tanıyabilen bir dil belirtir. Lexical analiz işleminde tarayıcı (scanner), kaynak kodun içinde önceden düzenli ifadelerle tanımlanmış anahtar kelimeleri arar ve bunların token tiplerini belirler.


"Sözcüksel Çözümleme/Analiz (Lexical Analysis)" indir ppt

Benzer bir sunumlar


Google Reklamları