Bölüm 4. Sözcüksel ve sözdizimsel analiz ISBN

Benzer belgeler
Bölüm 4. Sözcüksel ve Sözdizimsel Analiz ISBN

Bölüm 4. Sözcük ve Sentaks Çözümlemesi ( Analizi) ISBN

Semantik (Semantics): ifadelerin, deyimlerin, ve program birimlerinin anlamı Sentaks ve semantik bir dilin tanımı sağlar

YZM Biçimsel Diller ve Otomata Teorisi. Ders#06

Bölüm 3. Söz Dizilimi ve Anlamı Tanımlama ISBN

Syntax Analysis. 4/5/2004 Formal Diller 4.1

Tokenlarin Taninmasi

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

Konular. Hafta 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

DERLEYİCİ TASARIMI ÖDEV-2 RAPORU

KARADENİZ TEKNİK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR SİSTEMLERİ LABORATUARI BISON AYRIŞTIRICI (PARSER) ÜRETECİ

BAĞLAMDAN BAĞIMSIZ VE BAĞLAMDAN BAĞIMSIZ OLMAYAN DİLLER (CONTEXT-FREE AND NON-CONTEXT-FREE LANGUAGES)

Bölüm 3. Sentaks ve semantik tarifi ISBN

Regular Expression vs. Context-Free Grammars. Ambiguity. NFA to CFG. Neden RE ler kullanilir?

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Bölüm 3. Sözdizimi(Syntax) ve Anlamsal(Semantics) Tanımlama ISBN

Gramer Tabanlı Değerlendirme Yöntemleri

Üst Düzey Programlama

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Dilbilgisi ve Diller

Soru Toplam Puan Not

BLM210 HAFTA 2 FORMAL METHODS OF SYNTAX DESCRIPTION (SÖZDİZİM TARİFİNİN BİÇİMSEL YÖNTEMLERİ)

! " # $ % & '( ) *' ' +, -. /) /) 0 # /) %, %, 1 2

FORMEL DİLLER VE SOYUT MAKİNALAR. Hafta 1

BAĞLAMDAN BAĞIMSIZ (CONTEXT-FREE) GRAMERLER (CFG) VE DİLLER (CFL)

HSancak Nesne Tabanlı Programlama I Ders Notları

Sentaks (Syntax): ifadelerin (statements), deyimlerin (expressions), ve program birimlerinin biçimi veya yapısı

YZM 2116 Veri Yapıları

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

VT Sistem Gerçeklemesi. Ders Notları- #8

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Formal Diller Ve Otomat Teorisi

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Biçimsel Diller ve Otomata Teorisi. Final Sınavı Soruları A KİTAPÇIĞI

! " # $ % & '( ) *' ' +, -. /.,

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

FORMEL DİLLER VE SOYUT MAKİNALAR. Hafta 3

Bölüm 8. İfade Seviyesindeki Kontrol Yapıları ISBN

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

Java String İşlemleri

Bölüm 8. İfade -Seviyeli Kontrol Yapıları ISBN

Telefon Rehberi Uygulaması

Bölüm 5. Adlar(Names), Bağlamalar(Binding s),tip Kontrolleri (Type Checking), ve Etki Alanları ( Scopes) ISBN

İnternet Programcılığı Dersi 2.Dönem Ders Notu

Arasınav Soruları Bahar 2018

Programlama Dilleri 3

Chapter 8. Komut düzeyi kontrol yapıları ISBN

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Arasınav Örnek Soruları Bahar 2018

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

NESNEYE YÖNELİK PROGRAMLAMA

Matris İşlemleri Uygulaması

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

YZM 2116 Veri Yapıları

Genel Programlama II

FORMEL DİLLER VE SOYUT MAKİNALAR. Hafta 2

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Dil İşleyiciler (COMPE 424) Ders Detayları

Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Algoritma ve Akış Şemaları

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

OMÜ HAVACILIK VE UZAY BİLİMLERİ FAKÜLTESİ METEOROLOJİ MÜHENDİSLİĞİ BÖLÜMÜ MET103 BİLGİSAYAR PROGRAMLAMA I BÜTÜNLEME SINAVI

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Biçimsel Diller ve Otomata Teorisi. Final Sınavı Örnek Soruları A0 KİTAPÇIĞI

Yrd. Doç. Dr. Caner ÖZCAN

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Algoritmalar. DERS 7 Dengeli Arama Ağaçları Kırmızı-siyah ağaçlar Kırmızı-siyah ağacın yüksekliği Rotation / Dönme Insertion / araya yerleştirme

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

YZM 2116 Veri Yapıları

Özyineleme (Recursion)

Dr. Fatih AY Tel: fatihay@fatihay.net

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Derleyici Kuramı (Compiler Theory)

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

BİL-142 Bilgisayar Programlama II

ALGORİTMA VE PROGRAMLAMA I

1 PROGRAMLAMAYA GİRİŞ

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Sınav tarihi : Süre : 60 dak.

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Akış Konrol Mekanizmaları

Hafta 12 Karakter Tutan Diziler

Bölüm 1. Ön Hazırlıklar ISBN

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Programlama Nedir? Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir?

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

ELN1001 BİLGİSAYAR PROGRAMLAMA I

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Transkript:

Bölüm 4 Sözcüksel ve sözdizimsel analiz ISBN 0-321-49362-1

Bölüm 4 Konular giriş Sözcüksel Analiz Ayrıştırma(parsing) problemi Özyinelemeli aşağıya iniş ayrıştırma(recursive-descent Parsing) Aşağıdan-yukarıya ayrıştırma(bottom-up Parsing) Wesley. All rights reserved. 1-2

Giriş Dil gerçekleştirim sistemleri kaynak kodu gerçekleştirime bakmaksızın analiz etmelidir. Neredeyse tüm söz dizimsel analiz kaynak dilin biçimsel tanımlanması temellidir (BNF). Wesley. All rights reserved. 1-3

Söz dizimsel Analiz Söz dizimsel analiz iki parçadan meydana gelir: Düşük seviye kısım sözcüksel analizci( lexical analyzer)bir sonlu otomatadır. Yüksek seviye kısım; bir sözdizim analizcisi(syntax analyzer),veya ayrıştırıcı(parser) serbest içerik temelli bir aşağı-itme otomatı temellidir.(push-down automaton) Wesley. All rights reserved. 1-4

Sözdizimi tanımlamak için BNF kullanma Temiz ve kısa bir söz dizim tanımı sağlar Ayrıştırıcılar(parsers) direkt olarak BNF temelli olabilir. BNF temelli olan ayrıştırıcılar kolay bakımı yapılıp çalıştırılabilirler. Wesley. All rights reserved. 1-5

Sözcüksel(lexical) ve sözdizimsel(syntax) analizi niye ayırıyoruz? Basitlik- lsözcüksel analizde daha az karmaşık olan yaklaşımlar vardır. Ayırdığımızda ayrıştırcı(parser) daha kolay gerçekleştirilebilir. Verimlilik- Ayırarak sözcüksel analizci(lexical analyzer) üzerinde optimizasyon yapabiliriz. Taşınabilirlik Sözcüksel analizcinin parçaları taşınamaz ama ayrıştırıcının taşınabilir. Wesley. All rights reserved. 1-6

Sözcüksel Analiz(Lexical Analysis) Sözcüksel analizci verilen karakter dizisi(string) içinde belirli şablona uyan alt stringleri bulur (pattern matcher) Sözcüksel analizci ayrıştırıcının ön kısmıdır. Kaynak program içindeki lexeme ları belirler. Bulunan lexeme lar kategorilerini belirten token larla eşleştirilir. toplam bir lexeme; onun token ı IDENT Wesley. All rights reserved. 1-7

Sözcüksel Analiz Sözcüksel analizci ayrıştırıcının çağırdığı bir fonksiyondur.ayrıştırıcı bir sonraki lexeme ve token a ihtiyaç duydugunda çağırır. Sözcüksel analiz gerçekleştiriminde üç yaklaşım vardır: Token ların biçimsel tanımlarını yap ve yardımcı programlar yardımıyla tablo tabanlı bir sözcüksel analizci oluştur. Bir durum diyagramı(state diagram) tanımla. Bu diyagram tokenları ve aralarındaki geçişleri ifade eder. Bir durum diyagramı tanımlama ve el ile oluşturulan bir tablo tanımla. Bu tablo token lar ve durumlar arasındaki ilişkileri tanımlar. Wesley. All rights reserved. 1-8

Durum diyagramı Tasarımı(State Diagram) Bir doğal durum diyagramı kaynak koddaki her karakter için bir geçiş(transition) tanımlar. Bu şekildeki diyagram oldukça geniş olur. Wesley. All rights reserved. 1-9

Sözcüksel Analiz Birçok durumda, geçişler birleştirilerek oluşturulacak olan durum diyagramı küçültülür. Bir identifier tanırken tüm büyük ve küçük harfler eşdeğerdir. Tüm karakterler için karakter(character) sınıfını kullan Bir tamsayı değişmezi(integer literal) tanırken tüm rakamlar(digit) eşdeğer digit sınıfı kabul edilir. Wesley. All rights reserved. 1-10

Sözcüksel Analiz Saklı kelimeler(reserved words9 ve tanımlayıcılar(identifiers) birlikte tanınabilir. Belirlenmiş bir tanımlayıcı(identifier) ın ayrılmış bir kelime olupo olmadığını bir tabloya baklarak karar verilebilir. Wesley. All rights reserved. 1-11

Sözcüksel Analiz Uygun yardımcı alt programlar: getchar girdiden bir sonraki karakteri alır, nextchar ın içine koyar ve sınıfını belirleyerek charclass ın içine yazar addchar - nextchar dan karakteri lexeme içine koyar.(lexeme dizisinin sonuna ekler) lookup lexeme daki stringin bir ayrılmış kelime(reserved word) olup olmadığını belirler ve onun kodunu geriye çevirir. Wesley. All rights reserved. 1-12

Durum Diyagaramı(State Diagram) Wesley. All rights reserved. 1-13

Sözcüksel Analiz Gerçekleştirim int lex() { getchar(); switch (charclass) { case LETTER: addchar(); getchar(); while (charclass == LETTER charclass == DIGIT) { addchar(); getchar(); } return lookup(lexeme); break; Wesley. All rights reserved. 1-14

Sözcüksel Analiz case DIGIT: addchar(); getchar(); while (charclass == DIGIT) { } addchar(); getchar(); return INT_LIT; break; } /* End of switch */ } /* End of function lex */ Wesley. All rights reserved. 1-15

Ayrıştırma Problemi(The Parsing Problem) Verilen bir program için ayrıştırıcının(parser) amacı: Tüm sözdizimsel hataları bulmak;her hata için iyileştirici mesajlar yayınlamak ve gerekirse düzeltmeler yapmak. Bir ayrıştırma ağacı oluşturma Wesley. All rights reserved. 1-16

Ayrıştırma Problemi(The Parsing Problem) İki ayrıştırıcı kategorisi vardır: Yukarıdan-Aşağıya(Top down )- ayrıştırma ağacını kökden(root) başlayarak oluşturur. Sıra en sol türetme şeklindedir. Ayrıştırma ağacını(parse tree) ön sıra(preorder) şeklinde oluşturur. Aşağıdan-yukarı(Bottom up) yapraklardan başlayarak ayrıştırma ağacını oluşturur. En sağ türetme şeklinin tersi şeklinde sırası vardır. Ayrıştırıcı girdide her seferinde bir token a bakar. Wesley. All rights reserved. 1-17

Ayrıştırma Problemi(The Parsing Problem) Yukarıdan-Aşağıya Ayrıştırıcılar(Top-down Parsers) Verilen bir cümlesel biçimde; xaα,ayrıştırıcı doğru A kuralını en sol türetmedeki bir sonraki cümlesel biçimi oluşturacak şekilde seçmelidir. Bu işlemi A tarafından oluşturulan ilk token ile yapar. En yaygın yukarıdan aşağıya(top-down parsing) ayrıştırma algoritmaları: Özyinelemeli aşağıya iniş(recursive descent) kod temelli gerçekleştirim LL ayrıştırıcılar tablo temelli gerçekleştirim Wesley. All rights reserved. 1-18

Ayrıştırma Problemi(The Parsing Problem) Yukarıdan Aşağıya(Bottom-up)ayrıştırıcılar Verilen bir sağ cümlesel biçimde, α, α nın hangi alt stringinin gramerdeki sağ taraf olduğunu belirler. Bu önceki sağ türetmedeki cümlesek biçimi bulmak için indirgenmelidir. En yaygın yukarıdan aşağıya ayrıştırma algoritmaları (bottom-up parsing algorithms) LR family ailesindendir. Wesley. All rights reserved. 1-19

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) Gramerdeki her nonterminal için bir alt program vardır. Bu alt program bu nonterminal tarafından üretilen cümleleri ayrıştırır. EBNF bu tip ayrıştırıcılar için çok uygundur çünkü EBNF nonterminallerin sayısının mimumumlaştırır. Wesley. All rights reserved. 1-20

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) Bir deyim için bir gramer <expr> <term> {(+ -) <term>} <term> <factor> {(* /) <factor>} <factor> id ( <expr> ) Wesley. All rights reserved. 1-21

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) lex, isminde bir sözcüksel analizcimiz olsun; bu bir sonraki tokenı(next token ) nexttoken değişkenine koysun. tek RHS olduğunda kodlama: RHS deki her terminal sembolü için, bir sonraki girdi tokenı ile karşılaştır, eşleşirse devam et eşleşmezse bir hata ver RHS her nonterminal sembolü için, onunla ilişkili olan alt programı çağır. Wesley. All rights reserved. 1-22

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) /* Function expr Parses strings in the language generated by the rule: <expr> <term> {(+ -) <term>} */ void expr() { /* Parse the first term */ term(); Wesley. All rights reserved. 1-23

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) /* As long as the next token is + or -, call lex to get the next token, and parse the next term */ while (nexttoken == PLUS_CODE nexttoken == MINUS_CODE){ lex(); term(); } } Burası hata denetimi yapmaz. gelenek: her ayrıştırma rutini nexttoken içinde bir sonraki tokenın olmasını garanti eder. Wesley. All rights reserved. 1-24

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) Birden fazla RHS si olan nonterminal, hangi RHS yi ayrıştırması gerektiğine karar vermelidir. Girdideki bir sonraki token a bakılarak doğru RHS e seçilir. Bir sonraki token her RHS tarafından oluşturulan ilk token lar ile karşılaştırılarak doğru olan bulunur. Eşleşen yoksa bir sözdizimsel hata vardır. Wesley. All rights reserved. 1-25

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) /* Function factor Parses strings in the language generated by the rule: <factor> -> id (<expr>) */ void factor() { /* Determine which RHS */ if (nexttoken) == ID_CODE) /* For the RHS id, just call lex */ lex(); Wesley. All rights reserved. 1-26

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) /* If the RHS is (<expr>) call lex to pass over the left parenthesis, call expr, and check for the right parenthesis */ } else if (nexttoken == LEFT_PAREN_CODE) { lex(); expr(); if (nexttoken == RIGHT_PAREN_CODE) lex(); else error(); } /* End of else if (nexttoken ==... */ else error(); /* Neither RHS matches */ Wesley. All rights reserved. 1-27

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) LL Gramer Sınıfı(LL Grammar Class) Sol özyineleme problemi(the Left Recursion Problem) Eğer gramerde bir sol özyineleme varsa;ki bu direkt Ya da dolaylı özyineleme olabilir,bu yukarıdanaşağıya ayrıştırıcı için problemdir. Gramer bu sol özyinelemeyi değiştirecek şekilde değiştirilmelidir. Wesley. All rights reserved. 1-28

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) Karşılıklı ayrık olmama da başka bir problemdir( pairwise disjointness) Bir sonraki girdiye bakarak doğru RHS yi seçemiyorsak ayrıştırma yapmamız mümkün değildir. Tanım: FIRST(α) = {a α =>* aβ } (Eğer α =>* ε, ε FIRST(α) dedir) α =>* : sıfır veya daha fazla türetme varsa Wesley. All rights reserved. 1-29

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) Karşılıklı ayrık olma testi Gramerdeki her birden fazla RHS si olan A nonterminali için ;her kural çifti için, A α i vea α j, aşağıdaki sağlanmalıdır. Örnek: FIRST(α i ) FIRST(α j ) = φ A a bb cab A a ab Wesley. All rights reserved. 1-30

Özyinelemeli Aşağıya iniş ayrıştırma(recursive- Descent Parsing) Sol çarpanlarına ayırma(left factoring) bunu çözer Yedeğiştir <variable> identifier identifier [<expression>] ile <variable> identifier <new> <new> ε [<expression>] yada <variable> identifier [[<expression>]] Wesley. All rights reserved. 1-31

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Ayrıştırmada b ir önceki sağ cümlesek biçimi elde etmek için doğru RHS yi sağ cümlesek biçimde bulmaktır. Wesley. All rights reserved. 1-32

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) handle Tanım: β sağ cümlesel biçimin handle lıdır. γ = αβw sadece ve sadece S =>*rm αaw =>rm αβw Tanım: β sağ cümlesel biçimin bir phrase idir. γ sadece ve sadece S =>* γ = α 1 Aα 2 =>+ α 1 βα 2 Tanım: β sağ cümlesel biçimin bir (simple phrase) idir. γ sadece ve sadece S =>* γ = α 1 Aα 2 => α 1 βα 2 Wesley. All rights reserved. 1-33

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Handle lar hakkında: Sağ cümlesek biçimin handle ı en sol simple phrase idir. Verilen bir ayrıştırma ağacında bir handle bulmak oldukça basittir. Ayrıştırma bir handle arama gibi algılanabilir. Wesley. All rights reserved. 1-34

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Kaydır-İndirge(Shift-Reduce) algoritmaları Reduce is the action of replacing the handle on the top of the parse stack with its corresponding LHS Shift is the action of moving the next token to the top of the parse stack Wesley. All rights reserved. 1-35

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) LR ayrıştırıcıların avantajları: Programlama dilini tanımlayan tüm gramerler ile çalışırlar. Çok geniş bir gramer sınıfı ile çalışabilir. Mümkün olur olmaz sözdizimsel hataları tespit edebilir. LR sınıfı gramerler LL sınıfının bir üst sınıfıdır. Wesley. All rights reserved. 1-36

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) LR ayrıştırıcılar bir araç yardımıyla oluşturulmalıdır. Knuth un sezisi: Bir aşağıdan yukarıya ayrıştırıcı şu ana kadar tüm ayrıştırma geçmişini kullanarak doğru ayrıştırma kararını verebilir. Göreli küçük ve belirli sayıda farklı ayrıştırma durumları olabilir. Böylece tarihçe bir ayrıştırma durumunda bir ayrıştırma yığını içinde saklanabilir. Wesley. All rights reserved. 1-37

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Bir LR ayarı LR ayrıştırıcısının durumunu saklar. (S 0 X 1 S 1 X 2 S 2 X m S m, a i a i +1 a n $) Wesley. All rights reserved. 1-38

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) LR ayrıştırıcılar tablo temellidir, Tablo iki bileşenlidir, bir ACTION tablosu ve bir GOTO tablosu ACTION tablosu ayrıştırıcının verilen bir ayrıştırıcı durumu ve bir sonraki token a göre eylemini gösterir. Satırlar durum isimleri, sütunlar terminallerdir. GOTO tablosu indirgeme işleminden sonra ayrıştırma yığınına hangi durumun koyulacağını gösterir. Satırlar durum isimleri; sütunlar nonterminal lerdir. Wesley. All rights reserved. 1-39

LR ayrıştırıcısının yapısı(lr Parser structure) Wesley. All rights reserved. 1-40

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Başlangıç ayarlar: (S 0, a 1 a n $) Ayrıştırıcı eylemleri: Eğer ACTION[S m, a i ] = Shift S, bir sonraki ayar (S 0 X 1 S 1 X 2 S 2 X m S m a i S, a i+1 a n $) Eğer ACTION[S m, a i ] = Reduce A β ve S = GOTO[S m-r, A] ise, burada r = β nin boyudur bir sonraki ayar (S 0 X 1 S 1 X 2 S 2 X m-r S m-r AS, a i a i+1 a n $) Wesley. All rights reserved. 1-41

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Ayrıştırma eylemleri Eğer ACTION[S m, a i ] = Accept, ayrıştırma bitmişdir ve hata bulunmadı. Eğer ACTION[S m, a i ] = Error, ise ayrıştırıcı bir hata yönetim rutini çağırır. Wesley. All rights reserved. 1-42

LR Ayrıştırma tablosu Wesley. All rights reserved. 1-43

Yukarıdan Aşağıya Ayrıştırma(Bottom-up Parsing) Bir ayrıştırma tablosu yacc benzeri programlar yardımıyla verilen gramer kullanılarak oluşturulabilir. Wesley. All rights reserved. 1-44

Özet Söz dizimi dil gerçekleştirimin en yaygın kısmıdır. Bir sözcüksel analizci(lexical analyzer) bir şablon eşleyicidir. Bir özyinelemeli aşağıya iniş ayrıştırıcı(recursivedescent parser) bir LL ayrıştırıcıdır(parser) EBNF Aşağıdan yukarıya (bottom-up ) ayrıştırıcıların problemi: mevcut cümlesel biçimden alt string bulmaktır. LR ailesi kaydır-indirge ayrıştırıcılar(shift-reduce parsers) en yaygın aşağıdan -yukarıya ayrıştırıcılardır. Wesley. All rights reserved. 1-45