Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Derleyici Teorisine Giriş. Otomatik Çeviri Paradigması analiz üretim Kaynak Dil Hedef Dil Ara Dil transfer doğrudan çeviri.

Benzer bir sunumlar


... konulu sunumlar: "Derleyici Teorisine Giriş. Otomatik Çeviri Paradigması analiz üretim Kaynak Dil Hedef Dil Ara Dil transfer doğrudan çeviri."— Sunum transkripti:

1 Derleyici Teorisine Giriş

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

3 Analiz Yapısal programlamada ortaya çıkan iki temel görev vardır: 1. Girdiyi anlamlı alt parçalara ayırmak 2. 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.

4 Ayrıştırıcı (Parser) Ayrıştırıcı CFG (G) Token dizisi (s) L(G), s’yi kabul eder ve ağacı bulur. 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.

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

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

7 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. {{} {} {{} { }}} { {{{{ }}}}}...

8 Bağlam-Bağımsız Gramerler (CFG) CFG’ler birçok programlama dilini tanımada yeterlidir. 4 temel bileşenden oluşurlar: 1. Terminal semboller (a, b) 2. Terminal olmayan semboller (T) 3. Başlangıç sembolü (S) 4. Ü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  

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

10 Tanıma Op = '+'|'-'|'*'|'/' Int = [0-9]+ Open = ( Close = ) 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

11 Üretim 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 1) Start  Expr 2) Expr  Expr Op Expr 3) Expr  Int 4) Expr  Open Expr Close

12 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ı

13 Ö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*/ %

14 Örnek Bison Kodu %{ #include 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(); }

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


"Derleyici Teorisine Giriş. Otomatik Çeviri Paradigması analiz üretim Kaynak Dil Hedef Dil Ara Dil transfer doğrudan çeviri." indir ppt

Benzer bir sunumlar


Google Reklamları