İçeriğe atla

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

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

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

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

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

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

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

Şunları da inceleyin

  • Augmented Backus-Naur form
  • Backus-Naur form
  • Regular expression
  • Spirit Parser Framework
  • Wirth syntax notation

Kaynakça

  1. ^ "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. 

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Dil</span> insanlar arasında iletişim kurmayı sağlayan doğal bir iletişim aracı

Dil, insanlar arasında anlaşmayı ve iletişimi sağlayan doğal bir araç, kendisine özgü kuralları olan ve ancak bu kurallar içerisinde gelişen canlı bir varlık, çok boyutlu kavramlar bütünü; temeli tarihin bilinmeyen dönemlerinde atılmış bir gizli anlaşmalar düzeni, seslerden örülmüş toplumsal bir kurum ve yapıdır.

<span class="mw-page-title-main">Matematik</span> nicelik, yapı, uzay ve değişim gibi konularla ilgilenen bilim dalı

Matematik ; sayılar, felsefe, uzay ve fizik gibi konularla ilgilenir. Matematikçiler ve filozoflar arasında matematiğin kesin kapsamı ve tanımı konusunda görüş ayrılığı vardır.

Sayı, sayma, ölçme ve etiketleme için kullanılan bir matematiksel nesnedir. En temel örnek, doğal sayılardır. Sayılar, sayı adı (numeral) ile dilde temsil edilebilir. Daha evrensel olarak, tekil sayılar rakam adı verilen sembollerle temsil edilebilir; örneğin, "5" beş sayısını temsil eden bir rakamdır. Yalnızca nispeten az sayıda sembolün ezberlenebilmesi nedeniyle, temel rakamlar genellikle bir rakam sisteminde organize edilir, bu da herhangi bir sayıyı temsil etmenin organize bir yoludur. En yaygın rakam sistemi Hint-Arap rakam sistemidir, bu sistem on temel sayısal sembol, yani rakam kullanılarak herhangi bir negatif olmayan tam sayının temsil edilmesine olanak tanır. Sayılar sayma ve ölçme dışında, etiketlerde, sıralamada ve kodlarda kullanılmak için de sıklıkla kullanılır. Yaygın kullanımda, bir rakam ile temsil ettiği sayı net bir şekilde ayrılmaz.

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Tam sayı</span> sıfırın sağında bulunan sayılar büyükken solunda bulunan sayılar küçüktür

Tam sayılar, sayılar kümesinde yer alan sıfır (0), pozitif yönde yer alan doğal sayılar ve bunların negatif değerlerinden oluşan negatif sayılardan oluşan sayı kümesidir.

<span class="mw-page-title-main">Doğal sayılar</span> sayma sayıları kümesine 0ın eklenmesiyle oluşan sayılar kümesi

Doğal sayılar, şeklinde sıralanan tam sayılardır ve kimi tanımlamalara göre 0 sayısı da bu kümeye dâhil edilebilir. Aralarında standart ISO 80000-2'nin de bulunduğu bazı tanımlar doğal sayıları 0 ile başlatır ve bu durum negatif olmayan tam sayılar için 0, 1, 2, 3, ... şeklinde bir karşılık bulurken, bazı tanımlamalar 1 ile başlamakta ve bu da pozitif tam sayılar için 1, 2, 3, ... şeklinde bir eşlenik oluşturur. Doğal sayıları sıfır olmadan ele alan metinlerde, sıfırın da dahil edildiği doğal sayılar bazen tam sayılar olarak adlandırılırken diğer bazı metinlerde bu terim, negatif tam sayılar da dahil olmak üzere tam sayılar için kullanılmaktadır. Özellikle ilkokul seviyesindeki eğitimde, doğal sayılar, negatif tam sayıları ve sıfırı dışlamak ve saymanın ayrık yapısını, gerçek sayıların bir karakteristiği olan ölçümün sürekliliğiyle karşıtlık oluşturmak amacıyla sayma sayıları olarak adlandırılabilir.

<span class="mw-page-title-main">Gezegen</span> bir yıldız veya yıldız kalıntısının yörüngesinde dolanan gök cismi

Gezegen; genellikle bir yıldız, yıldız kalıntısı ya da kahverengi cücenin yörüngesinde bulunan, yuvarlak hâle gelmiş bir astronomik cisimdir. Uluslararası Astronomi Birliğinin (IAU) tanımına göre Güneş Sistemi'nde sekiz gezegen bulunur. Bunlar, karasal gezegenler Merkür, Venüs, Dünya ve Mars; dev gezegenler Jüpiter, Satürn, Uranüs ve Neptün'dür. Gezegen oluşumu için bilimsel açıdan mevcut en iyi teori, bir bulutsunun kendi içine çökmesi sonucu bir yıldızlararası bulut meydana getirdiğini ve yıldızlararası bulutun da bir önyıldız ve bunun yörüngesinde dönen bir öngezegen diski oluşturduğunu öne süren bulutsu hipotezidir. Gezegenler bu disk içinde, kütleçekiminin etkisiyle maddelerin kademeli olarak birikmesi sonucu, yığılma (akresyon) olarak adlandırılan süreçte büyürler.

<span class="mw-page-title-main">Rasyonel sayılar</span>

Rasyonel sayılar, iki tam sayı arasındaki oranı temsil eden, bir pay p ve sıfırdan farklı bir payda q olmak üzere, bir bölme işlemi veya kesir formunda ifade edilebilen sayıları tanımlar. Örneğin, rasyonel bir sayı olarak kabul edilir, bu kapsamda her tam sayı da rasyonel sayılar kategorisindedir. Rasyonel sayılar kümesi, çoğunlukla kalın harf biçimindeki Q veya karatahta vurgusu kullanılarak şeklinde ifade edilir.

<span class="mw-page-title-main">Unicode</span> endüstri standartı

Unicode Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standardıdır. Sistemin amacı farklı karakter kodlama sistemlerinin birbiriyle tutarlı çalışmasını ve dünyadaki tüm yazım sistemlerinden metinlerin bilgisayar ortamında tek bir standart altında temsil edilebilmesini sağlamaktır. Evrensel Karakter Kümesi (UCS) olarak bilinen ISO/IEC 10646 standardı ise, her iki organizasyonun işbirliği ile aynı sayısal karşılıkları taşımaktadır. Unicode, son sürümü itibarıyla 129 farklı modern ve tarihî yazım sistemine ait 120.000'den fazla karakteri ve emoji gibi çeşitli sembol kümelerini kapsamaktadır.

<span class="mw-page-title-main">Fince</span> Sondan eklemeli Finlandiyanın resmi dili

Fince (

PubMed, öncelikle yaşam bilimleri ve biyomedikal konulardaki referans ve özetlerin MEDLINE veritabanına erişen ücretsiz bir arama motorudur. Ulusal Sağlık Enstitülerindeki Amerika Birleşik Devletleri Ulusal Tıp Kütüphanesi (NLM), Entrez bilgi erişim sisteminin bir parçası olarak veritabanını korumaktadır.

<span class="mw-page-title-main">Bölme</span> Matematik işlemi

Bölme, aritmetiğin temelini oluşturan dört ana işlemden biri olarak kabul edilir. Diğer üç ana işlem ise toplama, çıkarma ve çarpma olarak sıralanır. İşlem sırasında bölünen miktar bölünen olarak adlandırılırken, bu miktarın bölündüğü sayıya bölen denir ve işlemin sonucunda elde edilen değer bölüm olarak tanımlanır.

Artı işareti ve eksi işareti, matematiksel semboller olarak kullanılmakta olup, pozitif ve negatif fonksiyonların gösterilmesinde sırasıyla kullanılırlar. Bunun yanı sıra, + toplama işlemi için kullanılır ki bu işlem bir toplam sonucunu üretir, ise çıkarma işlemi için kullanılır ve bir fark sonucunu meydana getirir. Bu işaretlerin kullanımı zamanla, daha az veya daha çok benzer diğer anlamlar kazanmıştır. Plus ve minus, Latincede sırasıyla "daha fazla" ve "daha az" anlamına gelmektedir.

Verilog elektronik sistemleri modellemek için kullanılan bir donanım tanımlama dilidir. Verilog analog, sayısal ve karışık işaretli devrelerin tasarımını, doğrulanmasını ve yürütülmesini değişik düzeylerde desteklemektedir. Verilog dilinin tasarımcıları dilin C programlama diline yakın bir söz dizimine sahip olmasını istemişlerdir. Böylece bu dile yatkın olan mühendislerin dili kolayca kullanmasını amaçlamışlardır. Dil küçük/büyük harf duyarlılığına sahiptir ve temel denetim akışının “if” ve “while” gibi anahtar kelimeleri, C'ye benzemektedir. Verilog birkaç temel yönde C’den farklıdır. Verilog bir blok kodu tanımlamak için kıvrık parantezler yerine Begin/End kullanmaktadır. Verilog 95 ve 2001 işaretçi veya yinelemeli alt yordamlar yapılarına sahip değildir fakat SystemVerilog bu özelliklere sahiptir. Son olarak Donanım Tanımlama Dilleri için çok önemli olan zaman kavramı C dilinde bulunmamaktadır. Verilog geleneksel programlama dilleri gibi basamaklarını tam olarak ardışık bir şekilde yürütmez. Verilog tasarımı modüller arasında bir hiyerarşi bulundurur. Modüller bir takım giriş, çıkış ve çift yönlü portlar şeklinde tanımlanır. Bir modül içinde yazmaç ve kablo listesi bulunur. Eş zamanlı ve ardışık ifadeler modülün davranışını; portların, kabloların ve yazmaçların arasındaki ilişki ile tanımlar. Ardışık ifadeler bir begin/end bloğuna konur ve blokla beraber ardışık olarak yürütülür. Tüm eş zamanlı ifadeler ve begin/end blokları koşut olarak yürütülür. Bir modül aynı zamanda diğer bir modülün bir veya daha çok örneğini içererek bir alt-davranışı belirtebilir. Eğer tasarımdaki modüller sadece sentezlenebilir ifadeler içeriyorsa bu tasarımın donanımda gerçekleştirilecek temel bileşenlerini ve bağlantılarını içeren netlist, yazılım sayesinde sentezlenebilir. Elde edilen bu netlist bir tümleşik devreyi tanımlamak amacıyla kullanılabilir.

<span class="mw-page-title-main">İşaret dili</span> anlamı iletmek için el ile iletişimi ve beden dilini kullanan dil

İşaret dilleri anlamı karşı tarafa iletmek için görsel kanalı kullanan dillere verilen addır. El işaretlerinin (manual) yanında el dışı işaretler (non-manual) ile ifade edilirler. İşaret dilleri kendilerine ait kelime dağarcığı ve dilbilgisel yapısı olan doğal dillerdir. Evrensel olmamakla beraber, işaret dilleri arasında çarpıcı benzerlikler de bulunur.

<span class="mw-page-title-main">Küme</span> matematiksel anlamda tanımsız bir kavramdır. Bu kavram "nesneler topluluğu veya yığını" olarak yorumlanabilir.

Küme, matematikte farklı nesnelerin topluluğu veya yığını olarak tanımlanmaktadır. Bu tanımdaki "nesne" soyut ya da somut bir şeydir. Fakat her ne olursa olsun iyi tanımlanmış olan bir şeyi, bir eşyayı ifade etmektedir. Örneğin, "Tüm canlılar topluluğu", "Dilimiz alfabesindeki harflerin topluluğu", "Masamın üzerindeki tüm kâğıtlar" tümcelerindeki nesnelerin anlaşılabilir, belirgin oldukları, kısaca iyi tanımlı oldukları açıkça ifade edilmektedir. Dolayısıyla bu tümcelerin her biri bir kümeyi tarif etmektedir. O halde, matematikte "İyi tanımlı nesnelerin topluluğuna küme denir." biçiminde bir tanımlama yapılmaktadır.

Yunan harfleri; matematikte, bilimde ve mühendislikte ayrıca sabitler ve özel fonksiyonlar için sembollerle matematiksel notasyonun yapıldığı her yerde, özellikle belirli nicelikleri temsil eden değişkenler için kullanılır. Bu bağlamda, büyük ve küçük harfler farklı ve alakasız şeyleri simgelerler. Latin harfi biçimindeki Yunan harfleri genellikle kullanılmazlar: büyük A, B, E, H, I, K, M, N, O, P, T, X, Y, Z gibi. "i, o ve u" Latin harflerine yakından benzediklerinden, küçük ι (iota), ο (omikron) ve υ (ipsilon) nadiren kullanılır. Bazen Yunan harflerinin değişik fontları matematikte bambaşka semboller için kullanılır, özellikle de φ (fi) ve π (pi).

Fula İngilizce telaffuz: [ˈfuːlə], Fulani İngilizce telaffuz: [fʊˈlɑːniː] veya Fulah, Batı ve Orta Afrika'da 20 ülkeye yayılan bir süreklilik içinde çeşitli lehçeler olarak konuşulan bir dildir.

Büyüktür işareti, bir matematiksel semboldür. Büyüktür işareti, bir sayının bir başka sayıdan büyük olduğunu göstermek için kullanılır. Büyüktür işareti ">" olarak yazılır. Örnekler: 8 > 3, 9 > 6, 14 > 10 ve 12 > 9

<span class="mw-page-title-main">Bozkurt işareti</span> Türk milliyetçiliğini ve Türkçülüğü simgeleyen bir el işareti

Bozkurt işareti, bozkurt selâmı veya bozkurt hareketi, Türk milliyetçiliğini ve Türkçülüğü sembolize eden bir el işaretidir. Türk mitolojisinden anlam taşıyan bu sembol siyasi görüş temsil etmeksizin tarih boyunca Türk halkları tarafından kullanılmıştır. Türkiye'de ise işaret, genellikle MHP'yle ve Ülkü Ocakları'yla özdeşleştirilmektedir.