Genişletilmiş Backus-Naur formu
Bilgisayar biliminde, Genişletilmiş Backus–Naur formu (EBNF) bağlamdan bağımsız dilbilgisini (context-free grammar) ifade etmek için kullanılan bir notasyondur. Başka bir ifadeyle, bilgisayar programlama dillerini ve biçimsel dilleri (formal languages) tanımlamanın bir yoludur. Backus–Naur formu (BNF) notasyonunu temel alır.
Niklaus Wirth tarafından geliştirilmiştir. En yaygın kullanılan türevleri standartlaştırılmıştır.
Temel Bilgiler
[değiştir | kaynağı değiştir]Kod, örneğin bir bilgisayar programının kaynak kodu, terminal sembol(amaç simge) olarak adlandırılan sembollerden oluşur. Bu semboller, karakterler, sayılar, noktalama işaretleri, boşluk işaretleri vb. olabilir.
EBNF, bu terminal sembol dizilerinin ilgili terminal olmayan (nonterminal) sembollere (ara simge biçimi) atanmasıyla oluşan üretim kuralını (production rule) tanımlar.
Örnek:
sifir haric sayi ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; sayi ::= "0" | sifir haric sayi ;
Bu üretim kuralı sol tarafta sayi adında terminal olmayan bir atama yapar. Dik çubuklar | alternatifleri gösterir (başka bir ifadeyle veya şeklinde de tanımlanabilir), kuralı oluşturan terminal semboller çift tırnak arasında verilmiş ve noktalı virgül ifadeyi sonlandırmıştır. sayi, 0 veya sifir haric sayi olarak ifadelendirildiğinden, bu kurala göre 0 ila 9 arasında değer alabilir.
Bir üretim kuralı virgül kullanarak terminal veya terminal olmayan semboller dizisi şeklinde de yazılabilir:
oniki ::= "1", "2" ; ikiyuzbir ::= "2", "0", "1" ; ucyuzoniki ::= "3", oniki ; onikibinikiyuzbir ::= oniki, ikiyuzbir ;
Atlanabilir veya tekrarlanabilir ifadeler süslü parantez ile verilebilir { ... }:
dogal sayi ::= sifir haric sayi, { sayi } ;
Bu durumda, 1, 2, ...,10,...,12345,... sözceleri doğru ifadelerdir. Süslü parantez içinde verilene uygun ifade hiç kullanılmasa da, defalarca kullanılsa da doğrudur.
Köşeli parantez opsiyonlu kullanımı ifade eder [ ... ]:
tam sayi ::= "0" | [ "-" ], dogal sayi ;
Bu kurala göre tam sayı sıfır veya işareti - olan veya olmayan bir doğal sayı olabilir.
EBNF ile yapılabilecek diğer şeyler arasında sembol tekrarına sınır koyabilme, üretim kuralında belli yerlere erişim engelleme veya açıklama kısımları ekleme gibi özellikleri sayabiliriz.
ISO standardına göre genişlemeler
[değiştir | kaynağı değiştir]ISO 14977[1] standardına göre EBNF genişletilebilirdir ve iki durumdan bahsedilir. Birincisi soru işareti arasında isteğe bağlı karakter katarı tanımlayabilmedir. Örneğin, boşluk karakteri aşağıdaki kuralla tanımlanabilir:
bosluk ::= ? US-ASCII character 32 ?;
İkinci durum şöyledir. Normalde etiket ifadeler parantez ile yazılamaz. Yani aşağıdaki şekil EBNF de geçersizdir:
something ::= foo (bar);
Ancak EBNF nin bir uzantısı bu notasyonu kullanabilir. Örneğin, Lisp dilbilgisinde, bir fonksiyon aşağıdaki kuralla tanımlanabilir.
function application ::= list(symbol, [ { expression } ]);
BNF'yi genişletmek
[değiştir | kaynağı değiştir]BNF isteğe bağlı öğe ve tekrarlamaların ifade edilememesi gibi bir soruna sahipti. Onun yerine ya hiç yokluk ve isteğe bağlı yapı içeren bir ara kural ya da tekrarlanan yapı ya da kendisi, biçiminde özyinelemeli bir kural kullanmak gerekiyordu.
Option:
signed number ::= [ sign, ] number ;
BNF stilinde:
signed number ::= sign, number | number ;
ya da:
signed number ::= optional sign, number ; optional sign ::= ε | sign ; (* epsilon açıkça boş bir yapıyı temsilen kullanılmıştır *)
şeklinde tanımlanabilir. Yineleme:
number ::= { digit } ;
BNF stilinde şöyle tanımlanabilir.:
number ::= digit | number digit;
Diğer eklemeler ve değişiklikler
[değiştir | kaynağı değiştir]EBNF BNF' nin bazı hatalarını düzeltir:
- Backus-Naur biçimi (<, >, |, ::=) işaretlerini kendi için kullanır. Bu işaretleri kullanan bir dil, Backus-Naur biçiminde bir değişiklik ya da açıklama yapılmadan kullanılamaz.
- Backus-Naur biçimi satır başına bir kurala izin verir.
Genişletilmiş Backus-Naur biçimi bu sorunları çözer:
- Amaç simgeler mutlaka tırnak işaretleri içine alınır. Ara biçim simgelerindeki açılı ayraçlar ("<...>") kaldırılabilir.
- Kuralın bitişini bir bitirici karakter, genellikle noktalı virgül, belirler.
Ayrıca, yineleme sayısını belirlemek, bazı olası seçenekleri dışlamak, yorumlar gibi geliştirme mekanizmaları da mevcuttur.
Buna rağmen, Genişletilmiş Backus-Naur biçimi tanımlayabileceği diller ölçüsünde Backus-Naur biçiminden daha ileri değildir. Genişletilmiş Backus-Naur biçimi ile gösterilen her dilbilgisi Backus-Naur biçimi ile de gösterilebilir. Ancak bu genellikle daha büyük bir temsile varır.
Genişletilmiş Backus-Naur biçimi, ISO tarafından ISO/IEC 14977:1996(E) kodu ile standartlaştırılmıştır.
Under some circumstances any extended BNF is referred to as EBNF. For example the W3C uses one EBNF to specify XML.
Diğer bir örnek
[değiştir | kaynağı değiştir]EBNF' ye göre tanımlanmış atamalara izin veren basit bir programlama dili:
(* a simple program in EBNF − Wikipedia *) program ::= 'PROGRAM', white space, identifier, white space, 'BEGIN', white space, { assignment, ";", white space }, 'END.' ; identifier = alphabetic character, { alphabetic character | digit } ; number ::= [ "-" ], digit, { digit } ; string ::= '"', { all characters − '"' }, '"' ; assignment ::= identifier, ":=", ( number | identifier | string ) ; alphabetic character ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" ; digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; white space ::= ? white space characters ? ; all characters ::= ? all visible characters ? ;
Yukarıdaki kurala göre söz dizimi doğru olan bir program:
PROGRAM DEMO1 BEGIN A0:=3; B:=45; H:=-100023; C:=A; D123:=B34A; BABOON:=GIRAFFE; TEXT:="Hello world!"; END.
Bu dil kontrol akışları, matematiksel ifadeler ve G/Ç komutlarıyla kolayca genişletilebilir, küçük ve kullanılabilir bir programlama dili haline getirilebilir.
Standartta normal gösterim olarak önerilen şu işaretler kullanıldı:
Kullanım | Notasyon |
---|---|
definition | = |
concatenation | , |
termination | ; |
separation | | |
option | [ ... ] |
repetition | { ... } |
grouping | (...) |
double quotation marks | " ... " |
single quotation marks | ' ... ' |
comment | (* ... *) |
special sequence | ? ... ? |
exception | - |
Kurallar
[değiştir | kaynağı değiştir]1. The following conventions are used:
- Each meta-identifier of Extended BNF is written as one or more words joined together by hyphens;
- A meta-identifier ending with “-symbol” is the name of a terminal symbol of Extended BNF.
2. The normal character representing each operator of Extended BNF and its implied precedence is (highest precedence at the top):
* repetition-symbol - except-symbol
, concatenate-symbol
| definition-separator-symbol = defining-symbol ; terminator-symbol
3. The normal precedence is over-ridden by the following bracket pairs:
´ first-quote-symbol first-quote-symbol ´ " second-quote-symbol second-quote-symbol " (* start-comment-symbol end-comment-symbol *) (start-group-symbol end-group-symbol ) [ start-option-symbol end-option-symbol ] { start-repeat-symbol end-repeat-symbol } ? special-sequence-symbol special-sequence-symbol ?
As examples, the following syntax-rules illustrate the facilities for expressing repetition:
aa = "A"; bb = 3 * aa, "B"; cc = 3 * [aa], "C"; dd = {aa}, "D"; ee = aa, {aa}, "E"; ff = 3 * aa, 3 * [aa], "F"; gg = {3 * aa}, "D";
Terminal-strings defined by these rules are as follows:
aa: A bb: AAAB cc: C AC AAC AAAC dd: D AD AAD AAAD AAAAD etc. ee: AE AAE AAAE AAAAE AAAAAE etc. ff: AAAF AAAAF AAAAAF AAAAAAF gg: D AAAD AAAAAAD etc.
İlgili çalışmalar
[değiştir | kaynağı değiştir]- The W3C used a different EBNF 3 Aralık 2003 tarihinde Wayback Machine sitesinde arşivlendi. to specify the XML syntax.
- The British Standards Institute published a standard for an EBNF: BS 6154 in 1981.
- The IETF uses Augmented BNF (ABNF), specified in RFC 4234.
Şunları da inceleyin
[değiştir | kaynağı değiştir]- Augmented Backus-Naur form
- Backus-Naur form
- Regular expression
- Spirit Parser Framework
- Wirth syntax notation
Kaynakça
[değiştir | kaynağı değiştir]- ^ "ISO/IEC 14977:1996 Syntactic metalanguage — Extended BNF". International Organization for Standardization. 1996. 6 Temmuz 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Ağustos 2024.
- Niklaus Wirth: What can we do about the unnecessary diversity of notation for syntactic definitions?19 Temmuz 2020 tarihinde Wayback Machine sitesinde arşivlendi. CACM, Vol. 20, Issue 11, November 1977, pp. 822–823.
- Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.
- The International standard (ISO 1497713 Mart 2006 tarihinde Wayback Machine sitesinde arşivlendi.) that defines the EBNF is now freely available as zipped pdf file 11 Mart 2007 tarihinde Wayback Machine sitesinde arşivlendi..
Dış bağlantılar
[değiştir | kaynağı değiştir]- Article "EBNF: A Notation to Describe Syntax (PDF)" 24 Temmuz 2008 tarihinde Wayback Machine sitesinde arşivlendi. by Richard E. Pattis describing the functions and syntax of EBNF
- Article "BNF and EBNF: What are they and how do they work?" 11 Şubat 2010 tarihinde Wayback Machine sitesinde arşivlendi. by Lars Marius Garshol
- Article "[The Naming of Parts](http://xml.com/pub/a/2001/07/25/namingparts.html)" 13 Mayıs 2008 tarihinde Wayback Machine sitesinde arşivlendi. by John E. Simpson
- ISO/IEC 14977 : 1996(E) 10 Eylül 2010 tarihinde Wayback Machine sitesinde arşivlendi.
- RFC 4234 - Augmented BNF for Syntax Specifications: ABNF
- BNF/EBNF variants, a table by Pete Jinks comparing several syntaxes 24 Mayıs 2008 tarihinde Wayback Machine sitesinde arşivlendi.
- EBNF Visualizer 2007-10-16 tarihinde Wayback Machine sitesinde arşivlendi.