Lexical Analysis – Sözcüksel Analiz

lex

Bu yazımda lexical analysis (sözcüksel analiz ) nasıl yapılır, bir programlama dilinde kullanılan kelimeler değişken mi reserved word (ayrılmış kelime for,if,float vb.) mi olduğunu derleyici nasıl anlar, neye göre yapar bunlardan bahsedeceğim.

Start diyerek başlıyoruz analiz etmek istediğimiz sözcüğün ilk karakterini getchar ile nextchara atarız. Nextcharda olan karakterin CharClassı belirlenir bu karakter Letter ise üst yoldan gider, Digit ise alttaki yoldan gideceğiz. Daha sonra nextcharda olan bu karakteri addchar ile lexemeya atarız.Getchar ile analiz etmek istediğimiz sözcüğün ikinci karakterini alırız yine bakarız digit mi letter mı diye ikisi haricinde (digit, letter) bir karakter gelirse ( , ; vb) analiz işlemimiz tamamlanmış demektir.Bu aşamadan sonra lexemeda bulunan kelime return lookup ile veya return Int_Lit ile bakarız ayrılmış kelime olup olmadığına , ayrılmış kelime ise derleyici o komutu çalıştıracaktır. Değişken ise derleyici ona göre işlem uygulayacaktır .

Örnek olarak hero2010; kelimesini değişken mi, ayrılmış kelime mi analiz edelim. İlk olarak h karakteri getchar ile nextchara atılır.”h”ye bakalım Digit mi, Letter mı diye. Letter olduğunu anladık Charclassa letter dedik ve “h” karakterini addchar ile lexeme ya attık.Şimdi getchar ile “e” karakterini alacağız üsteki yolu takip ediyoruz letter veya digit olmalı idi yukarıdaki resme göre baktık “e” karakteri letter bunu aldık addchar ile lexemeya attık sonra r ve o karakterleri içinde aynı işlemi yaptık sonra getchar ile 2 sayısını nextchara attık baktık yine digit mi letter mı diye digit olduğunu anladık addchar ile lexemeya atadık bu aşamada lexemenın değeri hero2 oldu.Sıra ile 0 , 1, 0 sayılarını da lexemeya aynı işlemleri yaparak attık. Sıra ; operatörüne geldi getchar ile nextchara aldık baktık digit veya letter mı diye değil, o zaman analiz işlemi tamamlandı şimdi ise return lookup ile lexemeda bulunan hero2010 ayrılmış kelimemi yoksa bir değişken adı mı onu kontrol edeceğiz ayrılmış kelime (for , while , if ,switch) olmadığını anladık token değerine ise değişken yazdık.Lexical Analysis işlemi tamamlandı.

« »