Sonlu Durum Otomatlarının Programlanması

Download Report

Transcript Sonlu Durum Otomatlarının Programlanması

SONLU OTOMATLARIN
PROGRAMLANMASI
Yılmaz Kılıçaslan
Sunum Planı
1. Gramerler ve Ayrıştırıcılar (Parsers)
2. Gramer (Dilbilgisi) Olarak Sonlu Otomatlar
3. Sonlu Otomatların ve Ayrıştırıcıların
Kodlanması
Prolog
ile
2
Gramerler ve Ayrıştırıcılar
 Ayrıştırıcı, girdi olarak bir gramer ve bir ifade (sembol
dizilimi) alır. Çıktı olarak, (en azından) verilen ifadenin
gramerin tanımladığı dile ait olup olmadığını söyler.
Gramer
AYRIŞTIRICI
Evet
Hayır
İfade
3
Gramer Olarak Sonlu Otomatlar

Her sonlu otomat bir dil tanımlar; dolayısıyla, aynı zamanda bir
gramerdir.
 Bir sonlu otomatın, Prolog ile kodlanması, başlangıç ve bitiş
durumlarının ve durumlar arasındaki her bir geçişin gerçekler (facts)
olarak belirtilmesinden ibarettir:
SONLU DURUM OTOMATI:
PROLOG PROGRAMI:
initial(q0).
final(q0).
g(q0,1,q1).
g(q1,1,q0).
g(q1,0,q3).
g(q3,0,q1).
g(q3,1,q2).
g(q2,1,q3).
g(q2,0,q0).
g(q0,0,q2).
4
Üç Aşamada Ayrıştırma (Parsing) İşlemi
 Ayrıştırma temelde üç iş yapacaktır:
1. İşe nereden başlaması gerektiğini belirleyecektir.
2. İşi nerede bitirmesi gerektiğini saptayacaktır.
3. Başlangıç ile bitiş arasındaki işlemleri
gerçekleştirecektir.
5
Prolog’la Kodlanmış bir Ayrıştırıcı
% Başlangıç
parse(String) :initial(CurrentState),
parse(String, CurrentState).
% Bitiş
parse([], CurrentState) :final(CurrentState).
% Ara İşlemler
parse([Symbol|Rest], CurrentState) :t(CurrentState, Symbol, NextState),
parse(Rest, NextState).
6
Örnek Sorgulamalar
3 ?- traverse([1,0,1,0,1,1]).
true.
4 ?- traverse([1,0,1,0,1,1,1]).
false.
7