Sizin de belirttiğiniz gibi, insanlar birbirleri arasında İngilizce, Fransızca, Almanca gibi "doğal" bir dille iletişim kurarlar. Doğal olarak adlandırılırlar, çünkü onları kasten icat etmek yerine doğal olarak elde ederiz (Esperanto bir istisna).
Resmi bir dil, bir amaç için veya başka bir şekilde icat edilmiştir. Örneğin, C gibi bir programlama dili bilgisayarları programlama amacıyla icat edilmiş resmi bir dildir.
Tüm diller, bir gramer kullanılarak tanımlanabilir. 1956'da Noam Chomsky tarafından gramer hiyerarşisi tanımlandı. Bu, aşağıdaki seviyelerden oluşur:
0 tipi gramerler (sınırsız gramerler). Bunlar en genel olan ve bir Turing Makinesi'ne eşdeğerdir. Bu nedenle, verilen bir dizgenin sınırlandırılmamış dilbilgisinin bir parçası olup olmadığına karar verme sorunu belirlenemez.
Tip 1 gramerleri (içeriğe duyarlı gramerler). İngilizce gibi hemen hemen tüm doğal diller bağlama duyarlıdır. İngilizce'deki bağlam duyarlılığına bir örnek iki kelime grubudur: "Zaman bir ok gibi uçar." ve "Meyve muz gibi uçar." Genel olarak, bilgisayarların içeriğe duyarlı dilleri anlaması zordur.
Tip-2 gramerleri (bağlamsız). Bağlamsız diller, çoğu programlama dilinin sözdiziminin teorik temelini oluşturur.
Tip 3 gramerleri (normal gramerler). Düzenli dil ailesi, düzenli ifadelerle elde edilebilir. Düzenli diller, arama kalıplarını ve programlama dillerinin sözcüksel yapısını tanımlamak için yaygın olarak kullanılır.
Tip 2 (bağlamsız) ve tip 3 (normal) dilbilgileri en çok bilgisayarlar tarafından kullanılır çünkü bunlar için ayrıştırıcılar verimli bir şekilde uygulanabilir.
BNF (Backus Normal Form veya Backus – Naur Form) , hesaplamada kullanılan dillerin sözdizimini tanımlamak için kullanılan bağlamsız gramerler için kullanılan bir gösterim tekniğidir.
Örneğin, bir tanımlayıcı şöyle tanımlanabilir:
<identifier> ::= <letter> { <letter> | <digit> }
bu, bir harfle başlaması gerektiği ve ek harf veya rakam içerebileceği anlamına gelir.
Daha önce bir harf 'a' olarak tanımlandı | 'b' | 'c' vb. ve aynı rakamı kullanarak rakam '0' ile '9' arasında tanımlanır.
AC "for" ifadesi şöyle tanımlanabilir:
<for_statement> ::=
'for' '(' <expression> ';' <expression> ';' <expression> ')' <statement>
Sözlüksel analizörler ve ayrıştırıcılar (bir derleyicinin veya tercümanın ilk aşamaları), BNF tarafından belirli bir dil için tarif edilen özel gramerleri kabul etmek için yapılmıştır. Sözlüksel analizörler tipik olarak bir dilin çeşitli belirteçlerini (örneğin bir anahtar kelime, tanımlayıcı veya sayı gibi) ayırmak için kullanılır ve ayrıştırıcı, belirteçlerin "nasıl" ifadesinin nasıl oluşturulduğu gibi birlikte nasıl çalıştığını bulmak için kullanılır. .