Derleyici Araçları FLEX & BISON

Slides:



Advertisements
Benzer bir sunumlar
Dizi Kullanan Örnekler
Advertisements

Soru1: 1’den 4’e kadar olan tamsayıları ekrana tek satırda görülecek şekilde yazdıran bir programı aşağıdaki metotları kullanarak yazınız. Bir printf ifadesi.
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
TEMEL C PROGRAMLAMA DERSİ - 1
C PROGRAMLAMA DİLİNE GİRİŞ
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
C++’A GİRİŞ Yılmaz Kılıçaslan.
SQL de Değişken Tanımlama
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
String Kütüphanesindeki Arama Fonksiyonları
Veri Tabanı Yönetim Sistemleri
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
BÖLÜM 6 SQL SERVER KOMUTLARI.
C++ Yapısı Giriş-Çıkış Komutları Döngü Komutları
Nesneye Yönelik Programlama
SQL de Değişken Tanımlama
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
Bilgisayar Programlama
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
MySQL Operatörleri ve Fonksiyonları
Paralel Programlamaya Giriş
FONKSİYONLAR.
Derleyici Teorisine Giriş
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)
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Chapter 1: A First Program Using C#
Temel Giriş/Çıkış Fonksiyonları
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++.
Paralel Programlamaya Giriş 2
Bilgisayar programlarının en büyük avantajı, kullanıcının işini kolaylaştırmalarıdır. Her bilgisayar programı bunu değişik metotlar kullanarak sağlar.
Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri Dizgi Çıktı İşlemleri Dizgi Fonksiyonları Karakter Fonksiyonları Gösterge Dizgileri.
 2006 Pearson Education, Inc. All rights reserved. Görsel C# ile Windows Programlama Güz 2009 (2. Hafta)
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: 0.
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.
Bilgisayar Programlama III C
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.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Dili Çağdaş Hakan Aladağ.
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ı.
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.
Bölüm 2 C Dilinin Temelleri
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
Bilgisayar Mühendisliğine Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
Ocak 2010 PAZARTESİ SALI ÇARŞAMBA PERŞEMBE CUMA CUMARTESİ PAZAR 1 2 3
Sunum transkripti:

Derleyici Araçları FLEX & BISON Edip Serdar GÜNER

Programlama Dilleri sonuc = a + b * 10; MOVF id3, R2 MULF #10.0, R2 ADDF R2, R1 MOVF R1, id1 sonuc = a + b * 10; Yüksek Seviye Düşük Seviye

Programlama Dilleri Gerçekleştirimleri Çevirici (Translator) Yorumlayıcı (Interpreter) Derleyici (Compiler) Yorumlayıcı + Derleyici

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

Derleme Adımları - 1 Kaynak Dil Lexical Analiz Sözdizim Analizi sonuc = a + b * 10 Lexical Analiz Lexical Analiz: ID(1) ASSIGN ID(2) ADD ID(3) MULT INT(10) Sözdizim Analizi Anlamsal Analiz: ASSIGN ID(1) ADD ID(2) MULT ID(3) int2real INT(10) Anlamsal Analiz Sözdizim Analizi: ASSIGN ID(1) ADD ID(2) MULT ID(3) INT(10) Ara Kod Üreticisi Ara Kod Kod Optimizasyonu Hedef Dil Üreticisi Hedef Dil

Derleme Adımları - 2 Kaynak Dil Lexical Analiz Sözdizim Analizi Ara Kod: temp1 = int2real(10) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 Optimize Edilmiş Kod: temp1 = id3 * 10.0 id1 = id2 + temp1 Lexical Analiz Hedef Dil: MOVF id3, R2 MULF #10.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 Sözdizim Analizi Optimizasyon: Anlamsal Analiz Adım 1: temp1 = 10.0 temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 Ara Kod Üreticisi Ara Kod Adım 2: temp2 = id3 * 10.0 temp3 = id2 + temp2 id1 = temp3 Kod Optimizasyonu Hedef Dil Üreticisi Adım 3: temp2 = id3 * 10.0 id1 = id2 + temp2 Hedef Dil

Lexical Analiz Lexeme Token Tarayıcı sonuc IDENTIFIER = “=” = “=” a IDENTIFIER + “+” b IDENTIFIER * “*” 10 NUMBER sonuc = a + b * 10 DÜZENLİ İFADELER [ \t\n]* → boşluklar [a-z][A-zA-Z0-9]* → identifier [0-9]+ → number identifier “=” identifier “+” identifier “*” number sonuc = a + b * 10

Sözdizim Analizi CFG (G) Ayrıştırıcı L(G), s’yi kabul eder ve ağacı bulur. Token dizisi (s) Hata mesajları CFG BNF (Backus-Naur Form) S = {a,b} N = {S} R = {S  aSb, S  } select_command ::= "select" [ "all" | "distinct" ] ( "*" | (displayed_column { "," displayed_column } ) ) "from" ( selected_table { "," selected_table } ) [ “where" condition ] { connect_clause } { group_clause } { set_clause } { order_clause } {update_clause }

Ayrıştırma statement expression expression expression expression Expression → identifier Expression → number Expression → Expression "+" Expression Expression → Expression "*" Expression Expression → "(" Expression ")“ Statement → identifier "=" Expression statement expression expression expression expression expression identifier identifier identifier number sonuc = a + b * 10

Lex & Yacc / Flex & Bison Lex / Flex, token ayrıştırma işlemini düzenli ifadeler kullanarak gerçekleştirecek C veya C++ kodunu otomatik olarak üreten bir yazılımdır. Yacc / Bison ise Lex / Flex tarafından üretilen çıktıyı alarak sözdizimsel kurallarla ayrıştırma işlemini gerçekleştirecek kodu üreten bir yazılımdır.

Flex Program Yapısı Bütün flex programları yanyana iki % işareti kullanılarak birbirinden ayrılan 3 bölümden oluşur. Tanım (definition) bölümü: C kodunun üstünde olması istenen tüm kod buraya yazılır. Bütün kod “%{“ ile “%}” arasında yer almalıdır. Kullanılması zorunlu değildir. Kurallar (rules) bölümü: Burada örüntüler ve bu örüntülerle karşılaşıldığında yapılacak işlemler tanımlanır. Kullanıcı alt-programları (user sub-routines) bölümü: Flex oluşturduğu koda bu alt-programları kopyalar.

Flex Örneği %% [\t ]+ /* boşlukları atla*/; Pazartesi|Salı|Çarşamba|Perşembe|Cuma { printf("%s hafta içi bir gündür.", yytext); } Cumartesi|Pazar { printf("%s haftasonu bir gündür.", yytext); } [a-zA-Z]+ { printf("%s gün değildir.", yytext); } int yywrap(void) { return 1; } int main(void) { yylex(); return 0; }

Flex Kullanımı Lexical analizde kullanmak üzere bir tarayıcı üretmek için öncelikle .lex uzantılı bir yapılandırma dosyası üretmek gerekir. Bu dosya kullanılarak flex gerekli C veya C++ kodu üretilir. flex deneme.lex Üretilen kod derlenerek lexical analiz işlemi yapılabilir. gcc lex.yy.c –o main

Bison Program 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 (Flex) %{ #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) %{ #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(); }

Bison Kullanımı bison -d calc.y flex lexer.l gcc calc.tab.c lex.yy.c –o calculator