Professional Documents
Culture Documents
Chapter 3 Turkish Version
Chapter 3 Turkish Version
Söz Dizilimi ve
Anlamı Tanımlama
ISBN 0-321-49362-1
Bölüm 3 Konular
• Giriş
• Söz Dizimi Tanımlamadaki Genel Problem
• Söz Dizimi Tanımlamanın Biçimsel
Yöntemleri
• Gramerlerin özellikleri
• Programların Anlamlarını Tanımlama:
Dinamik Anlamlar
Resul Kara
• Giriş
• Bir programlama dilinin özlü ve anlaşılır bir tanımını yapma görevi zor ancak dilin
başarısı için gereklidir
• ALGOL 60 ve ALGOL 68 kısa açıklamalar kullanılarak sunulan ilk dillerdir
• Bazı diller, biraz daha farklı lehçelere sahip olma sorunu yaşadı; bunun nedeni,
basit fakat resmi olmayan ve kesin olmayan tanımın bir sonucudur
• Bir dili tanımlamadaki sorunlardan biri, açıklamayı anlaması gereken kişilerin
çeşitliliğidir:
– ilk değerlendiriciler, uygulayıcılar ve kullanıcılar (son kullanıcılar)
• Çoğu yeni programlama dili, tasarımlarının tamamlanmasından önce, tasarımıcı
kuruluştaki kullanıcılar tarafından incelenir. Bunlara ilk değerlendiriciler denir.
• Programlama dili uygulayıcılarının bir dildeki ifadelerin ve program birimlerinin
nasıl oluşturulduğunu ve yürütülürken amaçlanan etkilerini belirleyebilmesi
gerekir
• Dil kullanıcıları, bir dil referans el kitabına başvurarak yazılım çözümlerini nasıl
kodlayacaklarını belirleyebilmelidir. Ders kitapları ve dersler bu sürece girer ancak
dil el kitapları genellikle bir dil hakkında yalnızca basılı bilgi kaynağıdır
• Programlama dilleri için yapılan çalışmalar, doğal dil çalışmaları gibi, sözdizimi ve
anlambilim alt başlıklarına ayrılabilir
• Bir programlama dili sözdizimi, ifadeler ve program birimleridir
• Dilin semantiği, bu ifadelerin ve program birimlerinin anlamıdır
Resul Kara
• Giriş
• Türkçe, İngilizce gibi doğal diller veya Java, C gibi yapay diller, alfabedeki karakter
dizelerinin bir dizisidir
• Bir dildeki karakter dizelerine cümleler veya deyimler denir
• Dilin sözdizimi kuralları, dilin alfabesindeki hangi karakter dizelerinin sıralanacağını
belirtir
• Örneğin, Türkçe’de, cümlelerin sözdizimini belirten çok sayıda karmaşık kurallar vardır
• En büyük ve en yaygın kullanılan programlama dilleri bile doğal dillerle
karşılaştırıldığında sözdizimsel olarak çok basittir
• Programlama dillerinin sözdiziminin biçimsel tanımlamaları çoğu zaman en düşük
seviyedeki söz dizimi birimlerinin açıklamalarını içermez
• Bu küçük birimlere lexem (sözcük) adı verilir
• Sözcüklerin tanımı, genellikle sözdizimsel tanımdan ayrı olan bir yapı ile oluşturulur
• Bir programlama dili lexemlar, sayısal literaller, operatörler ve özel kelimeler içerir
• Programları, karakter dizelerinden çok lexem dizeleri olarak düşünebiliriz
• Lexemler çeşiti gruplara ayrılmıştır:
– Değişkenler
– Metotlar
– Sınıflar
– Dildeki özel kelimeler
• Her lexem grubu bir isim veya simge ile temsil edilir. Bu simgelere lexem’ın kategorisi
(token) denir.
Resul Kara
• Giriş
Resul Kara
Söz Dizimi Tanımlama: Terminoloji
Resul Kara
Dillerin Biçimsel Tanımı
Resul Kara
Söz Dizilimi Tanımlamanın Biçimsel
Yöntemleri
• Backus-Naur Form(BNF) ve Bağlamdan Bağımsız
Gramer (Context-Free Grammar)
– Programlama dilinin söz dizimini tanımlamada çok iyi
bilinen yöntem
– 1950'lerin ortalarında, Noam Chomsky ve John Backus,
aynı sözdizimi açıklama biçimini geliştirdiler; daha sonra
sözdizimi açıklama biçimlemesi programlama dilinin en
yaygın kullanılan yöntemi haline geldi.
• Genişletilmiş (Extended) BNF-EBNF
– BNF’nin okunabilirlik ve yazılabilirliğinin geliştirilmiş şekli
• Gramerler ve Tanıyıcılar(Recognizers)
Resul Kara
BNF ve Bağlamdan Bağımsız
(Context-Free) Gramerler
• Backus-Naur Form(1959)
– John Backus tarafından Algol 58’i tanımlamak
için icat edildi
– BNF bağlamdan bağımsız gramere denktir
– BNF diğer dilleri tanımlamada kullanılan bir
metadildir.
– BNF’de söz dizimsel yapıların sınıflarını
göstermek için soyutlamalar kullanılır: Bunlar
söz dizimsel değişkenler gibi davranırlar
– Bu yapıya nonterminal semboller denir
Resul Kara
BNF Temelleri
Resul Kara
BNF Kuralları
Resul Kara
Listeleri Tanımlama
Resul Kara
Gramer ve Derivasyon
Resul Kara
Örnek Bir Gramer
<program> ® <stmts>
<stmts> ® <stmt> | <stmt> ; <stmts>
<stmt> ® <var> = <expr>
<var> ® a | b | c | d
<expr> ® <term> + <term> | <term> - <term>
<term> ® <var> | const
Resul Kara
Örnek Bir Derivasyon
Resul Kara
Derivasyon
Gramer 2:
Resul Kara
Gramer 2’nin Derivasyon Örneği
Resul Kara
Bir Başka Gramer Örneği
Resul Kara
Gramer Ayrıştırma Ağacı
Resul Kara
Gramer Ayrıştırma Ağacı
<program>
<stmts>
<stmt>
<var> = <expr>
a <term> + <term>
<var> const
b
Resul Kara
Gramer Ayrıştırma Ağacı
Resul Kara
Gramerlerde Belirsizlik
Resul Kara
Belirsiz İfadeli Bir Gramer
Resul Kara
Kesin İfadeli Bir Gramer
Resul Kara
Operatörlerin Birlikteliği
• Operatörlerin birlikteliği
gramerlerle de
gösterilebilir
• Operatörlerin birlikteliği,
aynı öncelik seviyesine
sahip operatörlerin yan
yana gelmesi durumunda
oluşur
• Örnek: A/B/C
Resul Kara
Genişletilmiş BNF
Resul Kara
Genişletilmiş BNF
Resul Kara
BNF ve EBNF
• BNF
<expr> ® <expr>+<term> | <expr>-<term> | <term>
<term> ® <term> * <factor> | <term> / <factor>
| <factor>
• EBNF
<expr> ® <term> {(+ | -) <term>}
<term> ® <factor> {(* | /) <factor>
Resul Kara
BNF ve EBNF
• BNF
<expr> → <expr> + <term> | <expr> - <term> | <term>
<term> → <term> * <factor> | <term> / <factor> | <factor>
<factor> → <exp> ** <factor> <exp>
<exp> → (<expr>) |id
• EBNF
<expr> → <term> {(+ | -) <term>}
<term> → <factor> {(* | /) <factor>}
<factor> → <exp> { ** <exp>}
<exp> → (<expr>) |id
Resul Kara
Öznitelik (Attribute) Gramerleri
Resul Kara
Statik Anlambilim
Resul Kara
Statik Anlambilim
Resul Kara
Öznitelik Gramerleri: Tanım
Resul Kara
Öznitelik Gramerleri: Tanım
Resul Kara
Yapısal Öznitelikler
Resul Kara
Öznitelik Gramerleri: Tanım özeti
Resul Kara
Öznitelik Gramerleri: Bir Örnek
• Söz dizimi
<assign> -> <var> = <expr>
<expr> -> <var> + <var> | <var>
<var> -> A | B | C
• Actual_type(gerçek_tür): <var> ve <expr> için
sentezlenmiştir. Bunlar <var> veya <expr> de int ve real
gerçek türlerini depolamak için kullanılır. Var içinde
saklanırsa, gerçek tür yapısaldır. Expr içinde saklanırsa çocuk
düğümlerin gerçek türlerinden belirlenir
• Expected_type(beklenen_tür): <expr> için mirastır.
Atama ifadesinin sol tarafındaki var’ın türü kullanılarak
belirlenir
Resul Kara
Öznitelik Gramerleri:Örnek (devam)
Anlam kuralı:
<expr>.actual_type ¬ <var>[1].actual_type
Belirteçler:
<var>[1].actual_type == <var>[2].actual_type
<expr>.expected_type == <expr>.actual_type
• Sözdizimi kuralı : <var> ® id
Anlam kuralı :
<var>.actual_type ¬ lookup (<var>.string)
Resul Kara
Öznitelik Gramerleri:Örnek (devam)
Resul Kara
Öznitelik Gramerleri:Örnek (devam)
<expr>.actual_type ¬
<var>[1].actual_type
<expr>.actual_type =?
<expr>.expected_type
Resul Kara
Öznitelik Gramerleri:Örnek (devam)
Resul Kara
Öznitelik Gramerleri:Örnek (devam)
Resul Kara
Öznitelik Gramerleri:Örnek (devam)
Resul Kara
Anlambilim
Resul Kara
Aksiyomatik Anlambilim(devam)
Resul Kara
Aksiyomatik Anlamın Biçimi
• Ön-son(Pre-post) biçimi :
{P} ifade {Q}
• Bir örnek: a = b + 1 {a > 1}
Mümkün bir önşart: {b > 10}
En zayıf önşart: {b > 0}
Resul Kara
Program İspat Süreci
Resul Kara
Aksiyomatik Anlam: Aksiyomlar
Resul Kara
Aksiyomatik Anlam: Aksiyomlar
Resul Kara
Aksiyomatik Anlam: Aksiyomlar
Resul Kara
Aksiyomatik Anlam: Aksiyomlar
Resul Kara
Döngü Sabiti
Resul Kara
Aksiyomatik Anlamın
Değerlendirmesi
Resul Kara
Matematiksel Nesnelerle
Anlambilim (devam)
Resul Kara
Denotasyonel-İşlevsel
Resul Kara
Döngünün Anlamı
Resul Kara
Özet
Resul Kara