PDP 3 1 Sentaks (Syntax): ifadelerin (statements), deyimlerin (expressions), ve program birimlerinin biçimi veya yapısı Semantik (Semantics): ifadelerin, deyimlerin, ve program birimlerinin anlamı Sentaks ve semantik bir dilin tanımı sağlar Bir dil tanımının kullanıcıları Diğer dil tasarımcıları Uygulayıcılar (Implementers) Programcılar (dilin kullanıcıları) 1-3 3 1
Bir dilde bulunan her yapıdaki anlamlı bileşenler o dilin soyut sözdizimi, tanımlar. +ab prefix ifadesi, a+b infix ifadesi, ab+ postfix ifadelerindeki + işlemcisi ve a ve b alt-ifadelerinden oluşan aynı anlamlı bileşenleri içermektedir. 4 4 Dil, bir alfabedeki karakter dizilerinden oluşurlar. Dildeki karakter dizileri cümle veya deyim oluşturur. 5 2
Cümle (sentence) herhangi bir alfabede karakterlerden oluşan bir stringdir Dil (language) cümlelerden oluşan bir kümedir Lexeme bir dilin en alt seviyedeki sözdizimsel (syntactic) birimidir ( *, sum, begin) Simge (token)(andaç) lexemelerin bir kategorisidir, lexeme'lerin gruplanması ile oluşan sınıflardır (tanıtıcı (identifier)) 6 Programlar, karakterler yerine lexeme'ler dizisi olarak düşünülebilir. Sözdizim kuralları: Hangi karakter dizilerinin o dilin alfabesinden ve o dile ait olduğunu belirlerler. Diller sözdizimsel olarak basittir. 7 3
Dilin metinsel sözdizimi, token'lar dizisidir. Örneğin bir tanımlayıcı; ortalama veya ogrenci gibi lexeme'leri olabilen bir token'dır. Bir token'ın sadece tek bir olası lexeme'i olabiliri. Örneğin, çarpma_işlemcisi denilen aritmetik işlemci *" sembolü için, tek bir olası lexeme vardır. Boşluk (space), ara (tab) veya yeni satır karakterleri, token'lar arasına yerleştirilmesi programın anlamına etkisi yoktur. 8 9 4
Tanıyıcılar (Recognizers) Bir tanıma aygıtı bir dilin girdi strringlerini okur ve girdi stringinin dile ait olup olmadığına karar verir Örnek: bir derleyicinin sentaks analizi kısmı Üreteçler (Generators) Bir dilin cümlelerini üreten aygıttır Belli bir cümlenin sentaksının doğru olup olmadığı, üretecin yapısıyla karşılaştırılarak anlaşılabilir 10 Bir programlama dilinin metinsel sözdizimini açıklamak için Gramer, kullanılır. Gramerler, anahtar kelimelerin (keywords) ve noktalama işaretlerinin yerleri; deyim listelerinin nasıl oluşturulacağını belirleyen bir dizi kuraldan oluşur. 11 5
Örnek Statement = "if" "(" Condition ")" Statement ["else" Statement] 4 bileşenden oluşur terminal symbols atomik "if", ">=", ident, number,... nonterminal symbols Sözdizim değişkenleri Statement, Expr, Type,... productions Nonterminallerin çözümü Statement = Designator "=" Expr ";". Designator = ident ["." ident].... start symbol Başlangıç nonterminali begin 12 Bağlam-Duyarsız (Context-Free) ve Backus-Naur Form (BNF) Gramerler Programlama dili sentaksını tanımlamayan en çok bilinen metottur. Extended BNF (Genisletimis) BNF un okunabilirliği ve yazılabilirliğini arttırır Gramerler ve tanıyıcılar (recognizers) 14 6
Bağlam-Duyarsız Gramerler (CFG) (Serbest İçerik Gramerleri ) Noam Chomsky tarafından 1950lerin ortalarında geliştirildi Dil üreteçleri (generators), doğal dillerin sentaksını tanımlamak için Bağlam-Duyarsız (Context-Free) diller adı verilen bir diller sınıfı daha sonra programlama dillerini uygulandı 15 Backus-Naur Form (1959) John Backus tarafından Algol 58 i belirlemek için icat edildi BNF bağlam-duyarsız (context-free) gramerlerin eşdeğeridir BNF başka bir dili tanımlamak için kullanılan bir metadildir (metalanguage) BNF de, soyutlamalar sentaktik (syntactic) yapı sınıflarını temsil etmek için kullanılır sentaktik değişkenler gibi davranırlar (nonterminal semboller adı da verilir) 16 7
Terminal semboller değişmez semboller, uç semboller de denir. ( ; gibi yapılar terminal sembollerdir. Productions: türetme kuralları söz dizim değişkenlerini türetme kuralları BNF ile açıklanan bir gramer dört bölümden oluşur. Başlangıç sembolü, terminal semboller, lexemeler ve simgeler (tokens) terminal_olmayan semboller (BNF soyutlamaları) ve kurallar'dan oluşan BNF gramer yapısı şekildeki gibi gösterilebilir: 17 17 CFG expression identifier number - expression ( expression ) expression operator expression operator + - * / BNF expression identifier number - expression ( expression ) expression operator expression operator + - * / 18 8
Javada atama ifadesinin BNF formu <assign> -> <var> => <expression> Kuralın sol tarafı (left hand side- LHS) sağ tarafı (right hand side - RHS) vardır ve terminal ve nonterminal sembollerden oluşur Bir gramer, kuralların boş olmayan sonlu bir kümesidir Bir soyutlama / nonterminal sembol birden fazla RHS ye sahip olabilir <stmt> <single_stmt> begin <stmt_list> end 19 Örnek bir gramer <program> <stmts> <stmts> <stmt> <stmt> ; <stmts> <stmt> <var> = <expr> <var> a b c d <expr> <term> + <term> <term> - <term> <term> <var> 20 9
Bir kuralın bir sol-tarafı (left-hand side - LHS) ve bir sağ tarafı (right-hand side - RHS) vardır, ve terminal ve nonterminal sembollerden oluşur Bir gramer, kuralların boş olmayan sonlu bir kümesidir Bir soyutlama / nonterminal sembol birden fazla RHS ye sahip olabilir <stmt> <single_stmt> begin <stmt_list> end 21 22 10
Bir türetme kuralların tekrarlı bir şekilde uygulanmasıdır. Bir başlangıç sembolünden başlanır ve tüm elemanları son olan sembol (terminal) den oluşan bir cümle de biter. 1-23 23 24 11
Sentaktik listeler özyineleme (recursion) kullanılarak tanımlanır <ident_list> ident ident, <ident_list> BNF kurallarından örnekler: <ident_list> identifier identifer, <ident_list> <if_stmt> if <logic_expr> then <stmt> 26 Bir türetimin hiyerarşik gösterimi 30 12
Gramer 31 Türemiş deyim A=B+C*A 32 13
türemiş gramerden parse ağacı 33 Bir grammer ancak ve ancak iki veya daha fazla farklı ayrıştırma ağacı olan bir cümlesel biçim üretiyorsa belirsizdir (ambiguous) <expr> <expr> <op> <expr> const <op> / - 36 14
Eğer ayrıştırma ağacını operatörlerin öncelik seviyelerini göstermek için kullanırsak, belirsizlik elde edemeyiz <expr> <expr> - <term> <term> <term> <term> / const const 37 Operatör birleşirliği de gramerle gösterilebilir <expr> -> <expr> + <expr> const (ambiguous) <expr> -> <expr> + const const (unambiguous) <expr> <expr> + const <expr> + const const 39 15
BNF Opsiyonel/seçimli kısımlar köşeli parantez [ ] içine yerleştirilir <proc_call> -> ident [(<expr_list>)] EBNF 40 RHS lerin (sağ-taraf) alternatif kısımları parantezler içine yerleştirilir ve dikey çizgilerle ayrılır BNF EBNF 41 16
Tekrarlamalar (0 veya daha fazla) { } içine yerleştirilir <ident> letter {letter digit} <ident_list> <identifier> {, <identifier>} 42 43 17
BNF <expr> -> '-' <num> <num> <num> -> <digits> <digits> '.' <digits> <digits> -> <digit> <digit> <digits> <digit> -> '0' '1' '2' '3' '4' '5' '6' '7' '8' '9 EBNF <expr> -> '-' <digit>+ ('.' <digit>+) <digit> -> '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 44 BNF <expr> <expr> + <term> <expr> - <term> <term> <term> <term> * <factor> <term> / <factor> <factor> EBNF <expr> <term> {(+ -) <term>} <term> <factor> {(* /) <factor>} 46 18
BNF ve EBNF'teki kurallar, ayrıştırma ağacı dışında sözdizim grafikleri (syntax graphs) ile de gösterilebilir. Sözdizim grafikleri, ilk olarak Pascal'ın gramerini açıklamak için kullanılmıştır. 47 Bu derste olması gereken özellik gramerleri, Aksiyomatic Semantik sunuya eklenmemiştir. Bahsi geçen konular vizeden sonra derste ele alındıktan sonra sunuya ilave edilerek güncellenecektir. 48 19