Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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

Benzer bir sunumlar


... konulu sunumlar: "Derleyici Araçları FLEX & BISON Edip Serdar GÜNER."— Sunum transkripti:

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

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

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

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

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

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

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

8 Sözdizim Analizi Ayrıştırıcı CFG (G) Token dizisi (s) L(G), s’yi kabul eder ve ağacı bulur. Hata mesajları  = {a,b}  = {S} R = {S  aSb, S   } CFG 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 } BNF (Backus-Naur Form)

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

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.

11 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.

12 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; }

13 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

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

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

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

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


"Derleyici Araçları FLEX & BISON Edip Serdar GÜNER." indir ppt

Benzer bir sunumlar


Google Reklamları