Derleyici Teorisine Giriş

Slides:



Advertisements
Benzer bir sunumlar
Dizi Kullanan Örnekler
Advertisements

Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Karar Verme: Eşitlik ve Karşılaştırma Operatörleri
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
Bölüm 4 – Kontrol İfadeleri:1.kısım
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
String Kütüphanesindeki Arama Fonksiyonları
Bölüm 10 Yapılar ve Birleşimler
Bölüm 3 – Yapısal Programlama
DÖNGÜ İFADELERİ.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Yapısal Program Geliştirme – if, if-else
Derleyici Araçları FLEX & BISON
C++ Yapısı Giriş-Çıkış Komutları Döngü Komutları
Bilgisayar Programlama
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
Paralel Programlamaya Giriş
FONKSİYONLAR.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
Bağlama Duyarlı Diller
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
1 Diller nasıl yazılmıştır? İki ana strateji: –Yorumlayıcılar - Interpreters (eski ve az çalışılmıştır) –Derleyiciler - Compilers (yeni, daha yoğun çalşılmıştır)
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
BAĞLAMDAN BAĞIMSIZ GRAMERLER ÖZYİNELEMELİ GEÇİŞ AĞLARI (Chomsky Hiyerarşisi: Tip 2) Yılmaz Kılıçaslan.
VERİ TİPLERİ VE DEĞİŞKENLER
C++ Ders Notları 2.Ders (Dilin Yapısı)
C++ Ders Notları 3.Ders (String İşlemleri)
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C++.
Programlama Dilleri Visual Basic C# C++ Pascal Delphi.
DÜZENLİ İFADELER Regular Expressions.
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
flex Sözcüksel Analiz İçin Bir Araç
Sözcüksel Çözümleme/Analiz (Lexical Analysis)
Sözcüksel Çözümleme/Analiz (Lexical Analysis)
2. HAFTA 2. Hafta.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Sentaks (Sözdizim) ve Semantik (Anlam)
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BISON (YACC) (Yet Another Compiler Compiler)
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
Bölüm: 0.
Bölüm 3: Sentaks ve Semantiği Tanımlama
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
C Programlamada, benzer tipte tanımlaman değişkenleri kontrol etmede bize en çok yardım eden dostlarımız dizilerdir. Örneğin: 100 Öğrencinin bilgilerini.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Biçimsel Diller ve Soyut Makineler
Hafta2 Rekürsif Algoritmalar
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
BSM208 PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Dil Çevrimi (Hafta4) 1.
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Formel Diller ve Soyut Makineler
Fonksiyonlar ve Diziler
C Programlama Dili Bilgisayar Mühendisliği.
Formel Diller ve Soyut Makineler
Turing Machines Turing Makineleri.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
Formel Diller ve Soyut Makineler
DİL ÇEVRİMİ Yüksek düzeyli bir dilde yazılmış bir program ancak makine diline çevrilerek bir bilgisayarda çalıştırılabilir.
BSM208 PROGRAMLAMA DİLLERİNİN PRENSİPLERİ
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
Sentaks ve Semantiği tanımlama
Sentaks ve semantik tarifi
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
C ile Programlamaya Giriş
Sunum transkripti:

Derleyici Teorisine Giriş Sözdizim Analizi Derleyici Teorisine Giriş

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

Analiz Yapısal programlamada ortaya çıkan iki temel görev vardır: Girdiyi anlamlı alt parçalara ayırmak Bu alt parçalar arasındaki ilişkiyi ortaya koymak Flex içinde kullanılan düzenli ifadeler, Chomsky hiyerarşisi içinde düzenli diller sınıfındadır. Bison ise ayrıştırma işlemi için Backus – Naur Form (BNF) adı verilen ve Chomsky hiyerarşisi içinde Bağlam Bağımsız Diller (Context-Free) sınıfında olan bir gösterim kullanmaktadır.

Ayrıştırıcı (Parser) CFG (G) Ayrıştırıcı L(G), s’yi kabul eder ve ağacı bulur. Token dizisi (s) Hata mesajları Ayrıştırıcı, bir CFG ve token dizisini girdi olarak alır, dizi CFG kurallarına uygunsa kabul eder ve çıktısını bir veri yapısı (ayrıştırma ağacı veya soyut sözdizim ağacı) olarak verir. Dizi CFG’ye uygun değilse hata mesajı döndürür. Her bir token görüldüğünde tek bir seçim yapılacak şekilde bir gramer geliştirilmelidir.

Derleyicinin Yapısı Ön Uç Arka Uç Kaynak Dil Lexical Analyzer Syntax Analyzer Ön Uç Semantic Analyzer Ara Kod Üreticisi Ara Kod Kod Optimizasyonu Arka Uç Hedef Dil Üreticisi Hedef Dil

Sözlüksel Analiz position := initial + rate * 60 [ \t\n]* → boşluk [a-z][A-zA-Z0-9]* → identifier [0-9]+ → number

Sözdizim Analizi Hedef: Elimizdeki tokenlardan oluşan listenin dilin sözdizimine uygun olup olmadığını belirlemek. Sözlüksel analiz için düzenli ifadeleri kullanan lex’ten faydalandık. Düzenli dillerin çözebildiği yapıların karmaşıklığı sınırlı olduğu için sözdizim analizinde kullanılmaya yetmez. {{} {} {{} { }}} { } . . .

Bağlam-Bağımsız Gramerler (CFG) CFG’ler birçok programlama dilini tanımada yeterlidir. 4 temel bileşenden oluşurlar: Terminal semboller (a, b) Terminal olmayan semboller (T) Başlangıç sembolü (S) Üretim kuralları Karşılıklı parantezleri tanıyan bir CFG şöyledir: S  ( S ) S S   1 terminal olmayan: S 2 terminal: “(”, “)” Başlangıç sembolü: S 2 üretim kuralı S  a S a S  T T  b T b T  

Sözdizim Analizi Expression → identifier Expression → number Expression → Expression "+" Expression Expression → Expression "*" Expression Expression → "(" Expression ")“ Statement → identifier ":=" Expression

Tanıma (2 - 1) + 1 Open Int Op Int Close Op Int 1) Start  Expr 2) Expr  Expr Op Expr 3) Expr  Int 4) Expr  Open Expr Close (2 - 1) + 1 Open Int Op Int Close Op Int Open Expr Op Expr Close Op Expr Open Expr Close Op Expr Expr Op Expr Expr Start

Üretim Start Expr Expr Op Expr Open Expr Close Op Expr 3) Expr  Int 4) Expr  Open Expr Close Start Expr Expr Op Expr Open Expr Close Int Expr Op Expr Int Int Start Expr Expr Op Expr Open Expr Close Op Expr Open Expr Op Expr Close Op Expr Open Int Op Int Close Op Int (2 - 1) + 1

Bison Kod yapısı %{ C tanımlamaları (tipler, değişkenler, fonksiyonlar, önişlemci komutları) %} Bison belirtimleri (gramer sembolleri, operator öncelik tanımları, vb.) %% Gramer kuralları Ek C kodları

Örnek Lex Kodu %{ #include "prog0-parser.h" %} %% [0-9]+ { return NUMBER; } [ \t] ; /*boşlukları atla*/ \n return 0; /*mantıksal EOF*/ . return yytext[0]; /*Bilinmeyen karakter*/

Örnek Bison Kodu %{ #include <iostream> using namespace std; void yyerror(char * err_string) { cerr << “Girdi eşleşmedi!" << endl; } extern int yylex(); %} %token NUMBER %% num_entry: NUMBER {cout << “Sayı buldum!" << endl;}; main() { yyparse(); }

Komutlar bison -d calc.y flex calc.l gcc calc.tab.c lex.yy.c –o calculator