Kısaca
Programlama dilleri, programı karakter dizileri olarak temsil eden bir sözdiziminden ve programın amaçlanan anlamı olan bir anlambiliminden oluşur.
Biçimsel diller anlamsız sözdizimidir. Bu dizgelere genellikle anlam ifade etmeden, resmen tanımlanmış dizgilerin kümelerinin yapısının incelenmesi amaçlanmaktadır.
Düzenli ifade ve diğer formaliteler (Bağlamsız Gramerler gibi), programlama dillerini ve doğal dillerin sözdizimsel bileşeni olarak kullanılan örgün dilleri tanımlamak, yani cümleleri yapılandırılmış bir şekilde göstermek için kullanılır. Bu yapıyı programlama dillerinin anlamlarıyla ilişkilendirmek için başka mekanizmalar kullanılır.
Buradakilerin çoğu, özellikle doğal dil konusunda oldukça basitleştirilmiştir.
Çok daha fazla ayrıntı ile
Sorunuzu cevaplamak için baştan başlamalıyız. Alışılmış anlamda bir dil, gayrı resmi olarak bilgi ya da fikir iletme aracıdır. Bir dilde, genellikle sözdizimi ile anlambilim arasında ayrım yapılır. Anlambilim, hakkında konuşmak / yazmak istediğiniz şeydir. iletmek istediğiniz bilgiyi Sözdizimi, onu iletmek için kullandığınız, yani insanlar arasında ve şimdi insanlar ve cihazlar arasında veya cihazlar (bilgisayarlar) arasında değiştirilebilecek geleneksel bir temsildir.
Genellikle, dog
bir köpeğin fikrini iletmek için bu sözcüğü kullanırsınız. Kelime dog
, üç harften veya bazı eşdeğer seslerden oluşur ve bir tür hayvanın temsili olması amaçlanmıştır. Anahtar fikir, iletişimin neyin iletileceğinin temsili ile yapılmasıdır. Temsilcilik yapılarına genellikle sözdizimi, temsil edilenlere semantik denir. Bu, doğal dilin yanı sıra programlama dilleri için aşağı yukarı gider.
Kelimeler az ya da çok temel anlamsal kavramları temsil eden sözdizimsel varlıklardır. Ancak bu temel kavramların daha karmaşık bir anlam vermek için çeşitli şekillerde bir araya getirilmesi gerekir. the dog
Belirli bir köpeği kastettiğimizi the dog bites the cat
iletmek ve daha karmaşık bir fikir iletmek için yazıyoruz
. Ancak kelimelerin düzenlenme şekli kurallarla sabitlenmelidir, böylece köpeğin ve kedinin hangisinin diğerini ısırdığını söyleyebiliriz.
Öyleyse sentence -> subject verb complement
, cümlelerle eşleşmesi ve bize her bölümle ilgili fikirlerin nasıl ifade edildiğini söylemesi gibi kurallarımız var . Bu kurallar sözdizimsel kurallardır, çünkü bize mesajımızın temsilinin nasıl organize edileceğini söylerler. subject
Kendisi bir kural tanımlanabilir subject -> article noun
vb, vb.
Aynısı matematikte de geçerlidir. Çok resmi bir sözdizimi ile yazılmış matematiksel ifadeniz var. ve ifadenin anlamı, sözdizimsel yapı analiz edilerek elde edilebilir. Örneğin
, bağlama bağlı olarak , iki katını alırsanız ve eklerseniz , aynı olması gerektiğini belirten bir denklem olarak okunabilir . Kurallardan bazıları: x 1 232x+1=23x123
equation -> expression "=" expression
expression -> expression "+" expression
expression -> number
Programlama dillerinin yapısı aynıdır. Programlama dilleri, çözülmesi gereken problemleri, teoremlerin kanıtını veya hayvan arasındaki dostane ilişkileri ifade etmek yerine, yapılacak hesaplamaları ifade etmede anlamsal olarak uzmanlaşmıştır. Ancak bu ana farktır.
Sözdiziminde kullanılan gösterimler genellikle karakter dizeleri veya sözlü diller için kullanılan seslerdir. Anlambilim genellikle soyut alana veya muhtemelen gerçeğe aittir, ancak düşünce süreçlerimizde veya cihazların davranışsal alanında hala soyutlanır. İletişim, bilgiyi / fikri, alıcı tarafından iletilen ve kodunu çözen sözdizimine kodlamayı gerektirir. Sonuçta alıcı tarafından ne şekilde olursa olsun yorumlanır.
Yani dilin gördüğümüz çoğunlukla sözdizimi ve yapısı. Yukarıdaki örnek, sözdizimsel dizeleri ve yapısal organizasyonlarını tanımlamanın en yaygın yollarından sadece bir tanesidir. Diğerleri var. Belirli bir dil için, bazı dizgilere bir yapı atanabilir ve diğerleri diline ait olmadığı söylenir.
Aynısı kelimeler için de geçerlidir. Bazı harf dizileri (veya ses) meşru kelimelerdir, diğerleri değildir.
Biçimsel diller anlambilimsiz sadece sözdizimidir. Bir alfabenin temel öğelerini kullanarak hangi dizilerin oluşturulabileceğini bir kural kümesi ile tanımlarlar. Kuralların neler olduğu, bazen karmaşık, çok değişken olabilir. Ancak biçimsel diller, programlama dilleri için doğal olsun olmasa da, dilsel iletişimin ötesinde birçok matematiksel amaç için kullanılır. Dizeleri bir dilde tanımlayan kural kümesine dilbilgisi denir. Ancak dilleri tanımlamanın başka bir yolu var.
Uygulamada, bir dil iki düzeyde yapılandırılmıştır. Sözlüksel seviye, bir karakter alfabesinden oluşturulmuş kelimeleri tanımlar. Sözdizimsel seviye, bir sözcük alfabesinden (veya daha kesin olarak sözcük ailelerinin, yani sonlu bir alfabe olarak kalması için) oluşturulan cümleleri veya programları tanımlar. Bu mutlaka bir şekilde basitleştirilmiştir.
Kelimelerin yapısı çoğu dilde (programlama veya doğal) oldukça basittir, bu nedenle genellikle genellikle en basit biçimsel dil olan şeyle tanımlanırlar: normal diller. Düzenli ifadelerle (regexp) tanımlanabilirler ve sonlu durum otomatları adı verilen programlanmış cihazlarla kolayca tanımlanabilirler. Programlama dillerinin durumlarda, bir kelimenin örnekler bir tanımlayıcı, bir tamsayı, dize, gerçek sayı, ayrılmış bir sözcük gibi olan if
ya da repeat
bir noktalama sembol veya açık parantez. Word familyası örnekleri tanımlayıcı, string, integer.
Sözdizimsel seviye genellikle biraz daha karmaşık bir biçimsel dil dili tarafından tanımlanır: bağlamsız diller, sözcükleri alfabe olarak kullanır. Yukarıda gördüğümüz kurallar, doğal dil için bağlamsız kurallardır. Programlama dilleri durumunda kurallar şunlar olabilir:
statement -> assignment
statement -> loop
loop -> "while" expression "do" statement
assignment -> "identifier" "=" expression
expression -> "identifier"
expression -> "integer"
expression -> expression "operator" expression
Bu tür kurallarla yazabilirsiniz:
while aaa /= bbb do aaa = aaa + bbb / 6
Bu bir ifadedir.
Ve üretilme şekli, ayrıştırma ağacı ya da sözdizimi ağacı olarak adlandırılan bir ağaç yapısıyla temsil edilebilir (burada tamamlanmadı):
statement
|
_______________ loop _______________
/ / \ \
"while" expression "do" statement
__________|_________ |
/ | \ assignment
expression "operator" expression _______|_______
| | | / | \
"identifier" "/=" "identifier" "identifier" "=" expression
| | | |
aaa bbb aaa ... ...
Bir kuralın solunda görünen isimlere terminal olmayanlar, kelimeler ise dil alfabesinde olduğu gibi (sözlük seviyesinin üzerinde) terminaller olarak da adlandırılır. Terminal olmayan bir programı oluşturmak için kullanılabilecek farklı sözdizimsel yapıları temsil eder.
Bu tür kurallara bağlamsız denir, çünkü terminal olmayan, göründüğü bağlamdan bağımsız olarak ilgili kurallardan herhangi biri kullanılarak keyfi bir şekilde değiştirilebilir. Dili tanımlayan kurallara bağlamsız dilbilgisi denir.
Aslında, tanımlayıcıların ilk kez bildirilmesi gerektiğinde veya bir ifadenin tür kısıtlamalarını sağlaması gerektiğinde bununla ilgili kısıtlamalar vardır. Ancak bu kısıtlama sözdizimsel olmaktan ziyade anlamsal olarak düşünülebilir. Aslında bazı profesyoneller onları statik anlambilim dedikleri şeye yerleştirir
.
Herhangi bir cümleye, herhangi bir program göz önüne alındığında, cümlenin ağacı tarafından verilen yapı analiz edilerek bu cümlenin anlamı çıkarılır. Bu nedenle, program verildiğinde, bir programa karşılık gelen ağaç yapısını kurtarabilecek ayrıştırıcılar adı verilen algoritmalar geliştirmek çok önemlidir.
Ayrıştırıcı, sözcükleri tanıyan ve ait oldukları aileyi belirleyen sözcüksel analizörden önce gelir. Ardından, kelimelerin veya sözcüksel öğelerin sırası, alttaki ağaç yapısını alan ayrıştırıcıya verilir. Bu yapıdan derleyici daha sonra programın anlamsal bölümünün derleyici tarafında işlem yaptığı kodun nasıl oluşturulacağını belirleyebilir.
Bir derleyicinin ayrıştırıcısı, aslında, ayrıştırma ağacına karşılık gelen bir veri yapısı oluşturabilir ve bunu derleme işleminin sonraki aşamalarına geçirebilir, ancak buna gerek yoktur. Ayrıştırma algoritması miktarını, program metninde örtülü olan sözdizimi ağacını keşfetmek için hesaplamalı bir strateji geliştirmek üzere çalıştırmak. Bu sözdizimi / ayrıştırma ağacı, derleme stratejisine (aşama sayısı) bağlı olarak süreçte açıklanabilir veya olmayabilir. Yine de gerekli olan, nihayetinde, hesaplama yapısında açık veya kapalı bırakılmak üzere, en azından bir ayrıştırma ağacının aşağıdan yukarıya doğru keşfedilmesidir.
Bunun nedeni, sezgisel olarak, sözdizimsel bir ağaç yapısına ilişkin anlambilimi tanımlamanın standart bir biçimsel yolunun, homomorfizm denilen şeydir. Büyük kelimeden korkma. Buradaki fikir yalnızca bütünün anlamını göz önünde bulundurmak, onları birbirine bağlayan operatöre dayanarak, parçaların anlamından yapılmıştır.
Örneğin, cümle the dog bites the cat
kural ile analiz edilebilir sentence -> subject verb complement
. Bilerek 3 alt ağaçlar anlam subject
, verb
ve complement
onları özne eylemi yaptığını ve kedi Isırılan biri olduğunu söyler taneciklerini, kural.
Bu sadece sezgisel bir açıklamadır, ancak resmileştirilebilir. Anlambilim, seçmenlerden yukarı doğru kurulur. Ancak bu çok karmaşıklığı gizler.
Bir derleyicinin dahili çalışması birkaç aşamada ayrıştırılabilir. Asıl derleyici, ara gösterimleri kullanarak aşama aşama çalışabilir. Ayrıca bazı aşamaları birleştirebilir. Bu, kullanılan teknolojiye ve eldeki dili derlemenin karmaşıklığına bağlıdır.