Ağ cihazı yazılım dillerinin sözdizimi. Sözdizimi (programlama). C tipi sistem C tipi sistem

  • 31.10.2019
bir yapı biçimi (program veya teori) olarak sözdizimi (programlama dili veya matematik teorisi) ve bunları birleştirme yolları. Sözdiziminin daha kesin bir tanımı dersin ilerleyen bölümlerinde formüle edilecektir.

Sözdizimi kavramını daha katı bir şekilde tanımlayalım.

Sözdizimi, yapıların biçimini, biçimini ve yapısını (anlamlarına veya pratik uygulanabilirliğine bakılmaksızın) inceleyen resmi bir matematik veya programlama dilinin açıklamasının bir bölümü olarak anlaşılır.

İleriye baktığımızda, programlama dili yapılarının anlamının semantik (sonraki derste tartışılacak) tarafından ve sorular ve pratik uygulanabilirliğin değeri - pragmatik tarafından tanımlanıp araştırıldığını not ediyoruz.

Sözdiziminin ana görevi, kabul edilebilir dil yapılarının biçimini ve türünü belirlemektir. Bu sorun, tüm dil yapılarının açıklamalarının listelenmesiyle çözülebilir. Böyle bir açıklama için mekanizmalardan biri, daha önce bahsedilen BNF notasyonudur.

Paralel olarak sözdiziminin BNF -formalizasyonunu ele alacağız lambda hesabı ve SML programlama dili. İkinci durumda, tuple (tuple) ve let-ifadeleri gibi temel özellikleri vurgulayarak kendimizi temel dil yapıları kümesiyle sınırlayacağız.

Programlama dilleri çalışmasında sözdiziminin rolü ve yeri hakkında doğru bir anlayış oluşturmak için, bir programın kaynak kodunu (örneğin, SML programlama dilinde yazılmış) makine koduna çevirmek için genelleştirilmiş bir şema düşünelim.

Programın çevirisi sırasında öncelikle sözde prosedür sözcüksel analiz, program metninde temel dil yapılarının veya başka bir deyişle sözlük birimlerinin (özellikle değişken adları veya tanımlayıcılar, özel veya anahtar kelimeler, sabitlerin değerleri, değişkenler vb.).

Bitmesi uzerine sözcüksel analiz sözde prosedür ayrıştırma bir test olan programın metni sözdizimi doğruluğu bir programlama dilinde yazılmış metin. Bu prosedür şunları içerebilir: yazarak doğrulamaşu ya da bu şekilde.

Son olarak, eğer program metninde bulunan tüm dil yapıları sözdizimsel olarak doğru ve ayrıca bulunamadı tür uyumsuzlukları analizör açısından yasak yazım doğruluğu, program metni şuna dönüştürülür: ara kod(montajcı, bir veya başka bir soyut makinenin kodu) veya gerçek makine kodu.

SML programlama dilinin sözdizimini sözdizimi ile karşılaştırarak düşünün lambda hesabı.

Her iki dilin (biçimsel matematik teorisinin dili ve programlama dili) sözdiziminin resmileştirilmesinin daha fazla netliği ve karşılaştırılabilirliği için, tek bir gösterim, yani BNF kullanacağız.

Her şeyden önce, notasyon üzerinde anlaşmamız gerekiyor.

Geleneksel BNF gösterimini ele alalım ve her birinin anlamını açıklayalım.

Aslında BNF, bazı kavramların diğerleri aracılığıyla tanımlanmasıdır. Bu durumda, kavramlar köşeli parantez içine alınır ve özü aşağıda açıklanan bir dizi özel sembol ve kural kullanılır.

Sembol tanımlama"::=", tanımlanmakta olan yapıyı daha önce tanımlanmış temel yapılardan ayırır.

Tanımlanmakta olan yapı "::=" açılı parantez içinde " soluna yazılır.<" и ">" .

Tasarımların alternatifleri (olası varyantları) dikey olarak listelenir.

Alıntılamanın (özel karakterleri çift tırnak içine alarak alıntıladığımız gibi) herhangi bir tanımı yoktur.

Örnek olarak ele alarak BNF gösterimini kullanarak sözdiziminin biçimselleştirilmesini gösterelim. resmi sistemönceki derslerden bize tanıdık lambda hesabı.

Yukarıdaki gösterimin anlamını açıklayalım.

Bu örnek, sözdizimsel gösterimi aşağıdaki alternatiflerden biri olarak ifade edilebilen bir ifade kavramını tanımlar.

Sözdizimi (programlama)

Sözdizimi- programların yapısını karakter kümeleri olarak tanımlayan bir programlama dilinin tarafı (genellikle - içerikten bağımsız olarak söylenir). Bir dilin sözdizimi, anlambilimine zıttır. Bir dilin sözdizimi “saf” bir dili tanımlarken, anlambilim çeşitli sözdizimsel yapılara anlamlar (eylemler) atar.

Çoğu zaman, sözdizimi derlemenin ilk aşamalarında kontrol edilir. Yorumlanan programlama dillerinde, sözdizimi denetimi ya yorumlama (yürütme) sırasında ya da ara koda ön derleme sırasında gerçekleştirilir. Ek olarak, IDE kullanılarak program kaynak metinleri düzenlenirken sözdizimi doğrudan kontrol edilebilir.

İşlev notasyonu sözdizimi

İşlev notasyonu sözdizimi- işlev kodunun girilmesiyle karşılanması gereken katı bir kural; işlev notasyon formu. İşlev sözdizimi yanlışsa, derleyici bir hata döndürür ve hata düzeltilene kadar program oluşturulmaz.

İşlev sözdizimi hataları şunları içerir (yanlış imza):

  • işlev adının çağrılırken yanlış yazılması (büyük/küçük harfe duyarlı diller için yanlış karakter durumu, yanlış ad alanı);
  • yanlış sayıda bağımsız değişken;
  • iletilen bağımsız değişkenlerin türü yanlış (örneğin, bir dize değeri iletmeniz gerekiyor, ancak sayısal bir değer iletildi);
  • geçersiz dönüş türü (özellikle belirtilmemiş bir tür).

Wikimedia Vakfı. 2010

Diğer sözlüklerde "Sözdizimi (programlama)" nın ne olduğuna bakın:

    Sözdizimi: Vikisözlük'te "sözdizimi" için bir giriş vardır Sözdizimi (Yunanca ... Wikipedia

    Bu makalenin tamamen yeniden yazılması gerekiyor. Tartışma sayfasında açıklamalar olabilir. Bu terimin başka anlamları vardır, bkz. Programlar ... Wikipedia

    Nesne Yönelimli Python Programlama OOP paradigmasını kullanan Python programlama: En başından beri Python, nesne yönelimli bir programlama dili olarak tasarlanmıştır. İçindekiler 1 Giriş 1.1 ... Wikipedia

    Şablonlar, genelleştirilmiş algoritmaları bazı parametrelere (örneğin, veri türleri, arabellek boyutları, varsayılan değerler) bağlı olmadan kodlamak için tasarlanmış bir C++ dil aracıdır. C ++ 'da işlev şablonları oluşturmak mümkündür ve ... Wikipedia

    Bu terimin başka anlamları vardır, bkz. Yapıcı. Nesne yönelimli programlamada, bir sınıf oluşturucu (İngilizce oluşturucudan, bazen kısaltılmış ctor), bir nesne oluşturulduğunda çağrılan özel bir talimat bloğudur. ... ... Wikipedia

    Bu terimin başka anlamları da vardır, bkz. SGK. SSI (Sunucu Tarafı, sunucu tarafı dahil etmelerini içerir), sunucudaki web sayfalarını ayrı bileşenlerden dinamik olarak "birleştirmek" ve ortaya çıkan HTML'yi istemciye yayınlamak için basit bir dildir ... ... Wikipedia

Programlama dillerinin sözdizimi ve anlamı

Her doğal dil gibi her programlama dilinin de kendi sözdizimi ve anlamı vardır.

Sözdizimi- öğelerinin oluşumunu belirleyen belirli bir dilin bir dizi kuralı. Başka bir deyişle, belirli bir dilde anlamsal olarak anlamlı karakter dizilerinin oluşturulması için bir dizi kuraldır. Sözdizimi, belirli bir dilin kavramlarını tanımlayan kurallar kullanılarak belirtilir. Kavram örnekleri şunlardır: değişken, ifade, operatör, prosedür. Kavramların sırası ve kurallarda izin verilen kullanımları, programları oluşturan sözdizimsel olarak doğru yapıları belirler. Sözdizimiyle tanımlanan, nesnelerin birbirleriyle nasıl etkileşime girdikleri değil, hiyerarşisidir. Örneğin, bir işleç yalnızca bir prosedürde yer alabilirken, bir işleçte bir ifade, bir değişken bir ad ve isteğe bağlı dizinlerden vb. oluşabilir. Sözdizimi, programdaki "tip uyuşmazlığı" veya "verilen ada sahip değişken tanımlı değil" gibi olaylarla ilgili değildir. Semantik bunu yapar.

anlam bilimi- dilin unsurları ile bunların anlamsal anlamları arasındaki ilişkiyi ve ayrıca dilin sözdizimsel yapılarının anlamlı anlamının yorumlanmasını belirleyen kurallar ve koşullar. Programlama dili nesneleri metne yalnızca belirli bir hiyerarşiye göre yerleştirilmez, aynı zamanda çeşitli çağrışımlar oluşturan diğer kavramlar aracılığıyla ek olarak birbirine bağlanır. Örneğin, sözdiziminin yalnızca bildirimlerde ve bazı ifadelerde geçerli bir konum tanımladığı, belirli bir türü olan, sınırlı sayıda işlemle kullanılabilen, bir adresi, boyutu olan ve kullanılmadan önce bildirilmesi gereken bir değişken. bir program.

Kaynak programın yüksek seviyeli bir dildeki metni normal bir test dosyasıdır. Onu "okumak" ve bir dizi makine talimatına dönüştürmek için, her şeyden önce program metninin ayrıştırılması gerçekleştirilir.

sözdizimsel çözümleyici- kaynak deyimlerini verilen programlama dilinin sözdizimsel kurallarına ve semantiğine uygunluk açısından kontrol eden bir derleyici bileşeni. Adına rağmen, çözümleyici hem sözdizimini hem de anlambilimi kontrol eder. Her biri kendi problemlerini çözen birkaç bloktan oluşur.

Programlama dilleri amaç, yapı, anlamsal karmaşıklık, uygulama yöntemleri bakımından birbirinden oldukça farklıdır. Bu, belirli çevirmenlerin gelişimine kendi özelliklerini dayatır. Dilin yapısı, sözdizimsel kurallarla tanımlanan kavramları arasındaki hiyerarşik ilişkileri karakterize eder. Programlama dilleri, bireysel kavramların organizasyonunda ve aralarındaki ilişkide birbirinden çok farklı olabilir. Örneğin, C++ dili ilk kullanımdan önce programın herhangi bir noktasında değişkenlerin bildirimine izin verirken, Pascal'da değişkenlerin özel bir bildirim alanında tanımlanması gerekir. Çevirmen, aldığı karara göre programı bir veya daha fazla geçişte analiz edebilir ve bu da çeviri hızını etkiler.

Programlama dillerinin semantiği çok geniş bir yelpazede değişiklik gösterir. Yalnızca bireysel işlemlerin uygulanmasının özelliklerinde değil, aynı zamanda program geliştirme yöntemlerindeki temel farklılıkları belirleyen programlama paradigmalarında da farklılık gösterirler. İşlemlerin uygulanmasının özellikleri, hem işlenen verilerin yapısı hem de aynı veri türlerini işleme kuralları ile ilgili olabilir. İki tam sayıyı toplama işlemini gerçekleştirirken bile C ve Pascal gibi diller farklı davranabilir.

Aynı dil birkaç şekilde uygulanabilir. Bunun nedeni, biçimsel gramer teorisinin aynı cümleleri ayrıştırmak için farklı yöntemlere izin vermesidir. Buna göre, derleyiciler orijinal kaynak metinden farklı şekillerde aynı sonucu (bir nesne programı) elde edebilirler. Birkaç Pascal derleyicisi vardır: Turbo Pascal, MS Pascal, Pascal with Objects, Delphi, Builder. Bununla birlikte, tüm programlama dillerinin bir takım ortak özellikleri ve parametreleri vardır. Bu ortaklık aynı zamanda tüm diller için benzer olan tercümanları düzenleme ilkelerini de belirlemektedir.

Herhangi bir dil için, yaratıcıları şunları tanımlar:

Doğru programları (alfabe) yazmak için kullanılabilecek bir dizi sembol;

Doğru programlar kümesi (sözdizimi);

- her doğru programın (anlambilim) "anlamı".

Bir ayrıştırma örneğini ele alalım. Programın kaynak kodunda a + (b + c) * d formülü yer alsın. Çoğu programlama dilinde, böyle bir formül, ağaç olarak görüntülenebilen program nesneleri hiyerarşisini tanımlar (Şekil 17.1). Daireler, temel yapılar olarak kullanılan sembolleri temsil eder ve dikdörtgenler, hiyerarşik ve muhtemelen yinelemeli bir yapıya sahip bileşik kavramları temsil eder.

Bir dilde doğru olan sözdizimsel yapı, başka bir dilde hatalı olabilir. Örneğin, Lisp'te yukarıdaki ifade tanınmaz. Ancak bu dil için (* (+ a b c) d) ifadesi doğru olacaktır.

Pirinç. 21.1. Ayrıştırma ağacı.

Tüm dillerin bir diğer karakteristik özelliği de anlambilimleridir. Dil işlemlerinin anlamını, işlenenlerin doğruluğunu belirler. Farklı programlama dillerinde aynı sözdizimsel yapıya sahip zincirler, anlambilimde farklılık gösterebilir (örneğin, bir aritmetik ifadenin yukarıdaki parçası için C ++, Pascal, Basic'te gözlenir). Dilin semantik bilgisi, onu sözdiziminden ayırmaya ve başka bir dile dönüştürmek (kod oluşturmak için) için kullanmaya izin verir. Anlambilimin tanımı ve doğruluğunun tanınması, genellikle çevirmenin en çok zaman alan ve hacimli kısmıdır, çünkü olası işlem ve işlenen kombinasyonlarını sıralamak ve analiz etmek gerekir.

Backus-Naur üniforması (BNF)

Backus-Naur formu (BNF) ilk olarak Algol-60'ın tarifinde kullanılmıştır. BNF, yalnızca gösterimde farklılık gösteren COP dilbilgisi notasyonuyla esasen çakışır. Aşağıdaki meta karakterler sağlanır:

<>- terminal olmayanları - dilin kavramlarını - vurgulamaya hizmet eder. | - "veya". Kuralların alternatif sağ taraflarını ayırır. - "tanımı gereğidir." COP dilbilgisi yapımlarını yazarken kullanılan oku değiştirir.

Terminal karakterleri oldukları gibi yazılır, onları seçmenin özel bir yolu yoktur. Algol-60 belirtiminden alınan BNF tanımlarına bir örnek - "Değiştirilmiş Mesaj":

<простое арифметическое выражение> ::= <терм>1 Toplama türü işlemler nasıl><терм> | <простое арифметическое выражение> <знак операции типа сложения> <терм> <знак операции типа сложения> ::= + | -

Gördüğünüz gibi, tekrarları ifade etmek için özyineleme kullanılır ve her yerde - solda. BNF, N. Wirth tarafından Pascal dilini tarif ederken kullanılmıştır. Gösterime tekrarı ifade eden meta parantezler (ve) eklenmesine rağmen, bunlar yalnızca bazı durumlarda kullanılırken, örneğin ifadelerin dilbilgisi sol özyinelemelidir.

sözdizimi diyagramları

sözdizimi diyagramı bir giriş kenarı ve bir çıkış kenarı ve etiketli köşeleri olan yönlendirilmiş bir grafiktir. Sözdizimi diyagramı resmi dili tanımlar. Girdi kenarından çıktıya herhangi bir yol üzerindeki köşelerdeki etiket zinciri, sözdizimi diyagramı tarafından belirtilen dilin zinciridir. Bu nedenle, sözdizimsel diyagramın otomat dillerin üretken dilbilgisi biçimlerinden biri olduğunu varsayabiliriz. Sözdizimi diyagramları ve sonlu otomata yakın bir bağlantıya sahiptir: herhangi bir otomat dili bir sözdizimsel diyagramla tanımlanır ve bunun tersi de geçerlidir, herhangi bir sözdizimsel diyagram, diyagramın tanımladığı dili tanıyan sonlu bir otomat (genellikle deterministik olmayan) oluşturmak için kullanılabilir.

Sözdizimi diyagramından uygun bir tanıma sonlu otomat oluşturduktan sonra, bu otomat donanımda veya yazılımda uygulanabilir.

Böylece, sözdizimsel diyagramlar sadece üretmeye değil, aynı zamanda otomat dilleri tanımaya da hizmet edebilir. Diyagramlar, K. Jensen ve N. Wirth'in "Pascal" kitabının yayınlanmasından sonra popüler oldu. İlk bölümünde - "Rehber" - dilin kompakt bir ders kitabı olarak kullanılırlar. Şek. 3.1 oradaki diyagramlardan birini gösteriyor.

Genişletilmiş Backus-Naur formu

Daha önce bahsedildiği gibi, tekrarları açıkça belirtmek için resmi gramerlerin (ve BNF'nin) notasyonunda bir takım zorluklar yaratmaktadır. Birincisi, tanımların anlaşılması zor, yinelemelerin bolluğu nedeniyle yeterince net değil. İkinci olarak, uygun semantik ağaçlar veren gramerlerin sol-yinelemeli olmasıyla ilgili problemler var. N. Wirth, Modula-2 ve Oberon'u tanımlarken genişletilmiş Backus-Naur formunu (RBNF) kullandı. Ana değişiklikler, tekrarlar için köşeli parantezlerin ( ve) eklenmesiyle ve [ ve ] - kuralların doğru kısımlarında terminal zincirlerinin ve terminal olmayanların isteğe bağlı oluşumunu belirtmek için kullanılır. Terminallerin ve terminal olmayanların belirlenmesine ilişkin sözleşmeler de değişti ki bu çok önemli değil. Aşağıda, RBNF'yi kullanacağız. Oberon-2 spesifikasyonunda şu şekilde tanımlanır: Varyantlar | ile ayrılır. Köşeli parantezler [ ve ], içlerine yazılan ifadenin isteğe bağlı olduğunu, kıvrık parantezler ( ve ) ise tekrarlandığını (muhtemelen 0 kez) ifade eder. Terminal olmayan karakterler büyük harfle başlar (örneğin, Operatör). Terminal karakterleri ya küçük bir harfle başlar (örneğin, ident) ya da tamamen büyük harflerle yazılır (örneğin, başla) ya da tırnak işaretleri içine alınır (örneğin, ":="). Buna, RBNF'de "tanım gereği" işaretinin rolünde "=" kullanıldığı ve her kuralın bir nokta ile bittiği eklenmelidir. Tanımlayıcı (isim) sözdizimi RBNF kullanılarak şu şekilde tanımlanabilir:

Ad = Harf ( Harf | Sayı ).

Bir meta dil olan RBNF, pratik ilgi dillerini tanımlamak için uygun olmalıdır. RBNF'nin yardımıyla dahil olmak üzere, RBNF'nin kendisinin sözdizimi tanımlanabilir:

Sözdizimi = ( Kural ). Kural = İsim "=" İfade İfade = Varyant ("I" Değişken). Seçenek - Öğe ( Öğe ). Öğe = Ad | Zincir | "(" İfade ")" | "[" İfade "]" | "(" İfade ")". Zincir = """ (sembol) """ | """( sembol ) """.

RBNF'de bunu ifade etmek kolay olsa da, bu tanımlar terminalleri ve terminal olmayanları ifade eden adlar arasında ayrım yapmaz. Ad ayrımları sözdiziminin dışındadır ve ayrı olarak belirtilebilir (ve belirtilir). Aynısı genellikle programlama dillerini tanımlarken yapılır.

C-ailesi dillerinin sözdizimi açıklamaları

C (İngilizce C) 1970'lerin başında Bell Labs çalışanları Ken Thompson ve Denis Ritchie tarafından B dilinin bir gelişimi olarak geliştirilen standartlaştırılmış bir prosedürel programlama dilidir. C, UNIX işletim sisteminde kullanılmak üzere oluşturulmuştur. O zamandan beri diğer birçok işletim sistemine taşınmıştır ve en çok kullanılan programlama dillerinden biri haline gelmiştir. C, verimliliği için değerlidir; sistem yazılımı oluşturmak için en popüler dildir. Uygulama programları oluşturmak için de sıklıkla kullanılır. C'nin yeni başlayanlar için tasarlanmamış olmasına rağmen, programlamayı öğretmek için aktif olarak kullanılır. Daha sonra, C dilinin sözdizimi diğer birçok dilin temeli oldu. C dili özlülük, modern bir dizi akış kontrol yapısı, veri yapıları ve kapsamlı bir dizi işlem ile karakterize edilir.

B. Kernighan ve D. Ritchie'nin ünlü kitabında, C dilinin sözdiziminin açıklaması BNF'ye eşdeğer bir notasyonda verilmiştir, ancak terminallerin ve terminal olmayanların gösterimi, alternatif sağ- kuralların el tarafları ve isteğe bağlı yapılar. Terminal olmayanlar italik, terminaller roman tipinde yazılır. Kuralların alternatif bölümleri, her satıra bir tane olmak üzere bir sütuna yazılır veya "one of" (one of) sözcükleriyle işaretlenir. İsteğe bağlı bölümlerin ardından "opt (isteğe bağlı) - isteğe bağlı; "neob" - bazı Rusça çevirilerde). Kuralın sol kısmı sola girintili ayrı bir satır olarak yazılır. İşte C dili yapı tanımlarının bir örneği:

Bileşik deyim (bildirim listopt deyimi listopt ) deyim listesi deyim deyimi deyimi deyimler listesi

Gördüğünüz gibi, tekrarları ifade etmenin açık bir yolu olmadığından, tanımlar yineleme ile doludur. C soyundan gelen dillerin sözdizimini açıklamak için minimum değişiklikle benzer bir notasyon kullanıldı: C++, Java, C#. İşte C# dili için ECMA-334 standardından bir alıntı:

Blok: (Açıklama-listopt) deyim-liste: deyim deyim-liste deyim

Görünüşe göre, bu notasyonun özel bir adı yok. Ve en azından garip görünüyor. Sadece okumak için değil, bilgisayarda işlem yapmak için de sakıncalıdır. Yeni dilleri tarif etmede kullanımının, yanlış anlaşılan gelenekleri takip etme ihtiyacından başka bir şeyle açıklanması zordur.

C dilinin özellikleri

  1. Matematiksel işlevler veya dosya yönetimi işlevleri gibi birçok temel özelliğin kitaplıklara alındığı basit bir dil tabanına sahiptir;
  2. Yapısal bir programlama stili kullanmanın rahatlığını sağlayan prosedürel programlamaya yönelik bir yönelime sahiptir;
  3. Anlamsız işlemlere karşı koruma sağlayan tip sistemine sahiptir;
  4. Örneğin, makroları tanımlamak ve kaynak dosyaları dahil etmek için bir ön işlemci kullanmak;
  5. İşaretçiler kullanılarak bilgisayar belleğine doğrudan erişime sahiptir;
  6. Minimum sayıda anahtar kelimeye sahiptir;
  7. Parametreleri bir fonksiyona referansa göre değil, değere göre iletmek (bu durumda, referansa göre geçmek, işaretçiler kullanılarak gerçekleştirilir);
  8. İşlev işaretçileri ve statik değişkenler;
  9. İsim kapsamları vardır;
  10. Kayıtlar, tek olarak manipüle edilebilen kullanıcı tanımlı toplu veri türleridir (yapılar);

C dilinde örnek "Merhaba dünya" programı

main() ( printf("Merhaba Dünya!\n"); ) #include int main() ( printf("Merhaba Dünya!\n"); dönüş 0; )

Ada dili sözdizimi açıklamaları

Ada (Ada)- ABD Savunma Bakanlığı tarafından gömülü sistemler için tek bir programlama dili (yani, otomatikleştirilmiş kompleksler için gerçek zamanlı kontrol sistemleri) geliştirmek üzere üstlenilen bir projenin sonucu olarak 1979-1980'de oluşturulan bir programlama dili. Bu, her şeyden önce askeri tesisler (gemiler, uçaklar, tanklar, füzeler, mermiler vb.) için yerleşik kontrol sistemleri anlamına geliyordu. Geliştiricilerin evrensel bir dil oluşturma görevi yoktu, bu nedenle Ada'nın yazarları tarafından verilen kararlar seçilen konu alanının özellikleri bağlamında alınmalıdır. Dil, Ada Lovelace'ın adını almıştır.1970'lerin başından ortalarına kadar yapılan araştırmalar, Pentagon'un tüm görevleri için yaklaşık 450 dil ve lehçeleri yerine tek bir programlama dili kullanması durumunda, büyük maliyet tasarruflarının mümkün olacağını göstermiştir ( yaklaşık 1983'ten 1999'a kadar olan dönem için 24 milyar dolar) Ada dili, yapılandırılmış programlama fikirlerine dayanmaktadır ve karmaşık çok modüllü programların geliştirilmesi, yüksek derecede makine bağımsızlığı ve taşınabilirlik için destek sağlar. Dili tasarlarken, her şeyden önce, dikkat güvenilirlik ve verimliliğe odaklandı - dil, özellikle yüksek güvenilirlik gereksinimlerine tabi olan gömülü sistemler için büyük gerçek zamanlı yazılım sistemlerinin geliştirilmesi için oluşturuldu.

özellikler

Ada, üst düzey paralel işlem programlama araçlarını içeren yapılandırılmış, modüler, nesne yönelimli bir programlama dilidir. Ada'nın sözdizimi, Algol veya Pascal gibi dillerden miras alınmıştır, ancak genişletilmiş ve daha titiz ve mantıklı hale getirilmiştir. Ada kesin olarak yazılmış bir dildir, türleri olmayan nesnelerle çalışmayı hariç tutar ve otomatik tür dönüştürmeleri mutlak minimuma indirilir.

Sözdizimi özellikleri

  1. Programlar modülerdir, modüller arasında tanımların içe-dışa aktarılmasını kontrol eden mekanizma iki farklı direktif içerir: biri başka bir modülü (ile) bağlamak için, diğeri tanımlarını içe aktarmak (kullanmak) için. İçe aktarma sırasında modülü yeniden adlandırmak da mümkündür (yeniden adlandırma) - bu seçenek, programcının paketi belirlemesi için daha uygun olan tanımlayıcıları kullanmanıza olanak tanır.
  2. Paketler (modül türlerinden biri) bir başlık ve kişisel bir bölüm içerebilir - içindekiler dışa aktarılmaz ve diğer modüller tarafından kullanılamaz.
  3. Genelleştirilmiş (özel) modüllerin mekanizması desteklenir: belirli bir tür belirtmeden genelleştirilmiş veri işleme algoritmalarını tanımlamaya izin veren paketler, prosedürler ve işlevler.
  4. Hem yerleşik hem de programcı tarafından oluşturulmuş gelişmiş tipte bir sistem. Yeni türler oluşturmanın birçok yolu vardır, dil iki farklı kavramı destekler: "alt tür" ve "türetilmiş tür". Bir türün ve bir alt türün değişkenleri uyumludur, bir türün değişkenleri ve onun türetilmiş türü uyumlu değildir.
  5. Prosedürleri ve işlevleri çağırmanın gelişmiş yolları: giriş ve çıkış parametreleri desteklenir, gerçek parametreler resmi adlarla keyfi bir sırayla, varsayılan değerlerle parametreler iletilir.
  6. Prosedürlerin, fonksiyonların ve işleçlerin yeniden tanımlanması desteklenir - aynı ada ancak farklı imzalara (parametre türleri ve sayısı) sahip bir yordamın, işlevin veya işlecin birkaç çeşidinin oluşturulması.
  7. Dile yerleşik paralel programlama destek yapıları: "görev" (paralel olarak yürütülen program parçası), "görev girişi" (paralel görevleri senkronize etme ve iletme aracı) kavramları desteklenir, buluşma mekanizması desteklenir (etkileşim için protokol) bunlardan birinin girişi yoluyla paralel görevler ), koşullu iplikler arası etkileşimi düzenlemek için bir SELECT seçim ifadesi vardır (bir buluşma için hazır olma durumuna ve diğer bazı koşullara bağlı olarak etkileşim kurulacak paralel bir görev seçme).

Ada-83 ve Ada-95 dillerinin bağlamdan bağımsız gramerleri, tekrarların ve isteğe bağlı bölümlerin tanımlarının eklendiği BNF varyantı kullanılarak tanımlanır. Terminal olmayanların adları, ad bileşikse alt çizgi kullanılarak normal yazı tipiyle ve ayrılmış sözcükler kalın harflerle yazılır. Ada'da ne köşeli parantez ne de kıvrık parantez kullanılmadığı için "|" işareti de kullanılmaz. (bunların tümü meta karakterlerdir), terminaller için özel bir tanımlama yoktur. Ada-95 standardından alınan if ifadesi sözdiziminin tanımı şöyle görünür:

If_deyimi::= if koşulu o zaman ifadelerin dizisi (elsif koşulu ardından ifadelerin dizisi) end if;

İlginç ve kullanışlı bir özellik: yapısal yapıların sözdizimi kuralları, programlarda önerilen biçimlendirmeye karşılık gelen biçimde sunulur (satırlara ayırma, girintiler).

Güvenilirlik gereksinimlerini karşılamak için dil, derleme aşamasında mümkün olduğu kadar çok hata tespit edilecek şekilde tasarlanmıştır. Ek olarak, dilin geliştirilmesindeki gerekliliklerden biri, yazma kolaylığı zararına bile program metinlerinin maksimum okunabilirliğiydi. Bu yaklaşımın sonucu, biraz "ağır" bir sözdizimi ve en yaygın endüstriyel dillerde (C ve C ++) bulunmayan ve genellikle profesyonel programcılar tarafından gereksiz olarak algılanan birçok kısıtlamaydı, örneğin, aynı güçlü yazıyor. Bu da Ada'nın karmaşık, muğlak ve kullanımı elverişsiz bir dil olduğu fikrinin oluşmasına yol açtı.

Ada'da örnek program "Merhaba dünya"

Ada.Text_IO ile; prosedür Merhaba, Ada.Text_IO; begin Put_Line("Merhaba dünya!"); Merhaba bitirmek;

Cobol ve PL/1 Söz Dizimi Tanımı

COBOL (COBOL, ORTAK İş Odaklı Dil), üçüncü nesil bir programlama dili (1959'da ilk sürüm), öncelikle iş uygulamaları geliştirmek için tasarlandı.İlk birleşik Cobol standardının geliştiricisi Grace Hopper'dı (Cobol'un büyükannesi). 1997'de yaklaşık 240 milyar satır Cobol kodu aktif kullanımdaydı. Dünyadaki finansal işlemlerin yaklaşık %90'ı Cobol'da işlenir ve ticari veri işlemenin %75'i Cobol'da yazılır. Şu anda kullanımda olan Kobol kodunun toplam maliyetinin 2 trilyon ABD doları olduğu tahmin edilmektedir. Her yıl Cobol'da yazılan milyarlarca yeni kod satırı var.

Cobol ve PL/1 dillerini tanımlamak için erken notasyonlara bir örnek olan tuhaf bir notasyon kullanılmıştır. İşte bir örnek - Cobol'daki MOVE fiil formatının tanımı:


İşlevsel kelimelerin altı çizilir, köşeli parantezler yapının isteğe bağlı kısımlarını gösterir ve kıvrık parantezler, bir sütunda yazılan birkaç alternatif arasından seçimi gösterir. Gördüğünüz gibi tekrar, üç nokta ile gösterilir. Veritabanı dillerinin tanımlanmasında da aynı tür formül kullanılmıştır.

Cobol dilinin özellikleri

  1. Sakarlık, ayrıntı
  2. İş uygulamalarında (en azından ABD'de) uzun ömürlü olmasını sağlayan, veri yapıları ve dosyalarla çalışmak için iyi, modern araçlar.
  3. Problemleri çözmek için tasarlanmış belirli makinelerden bağımsız bir biçimde, görsel ve oldukça kompakt bir algoritma gösterimi sağlar.
  4. Planlama ve ekonomik sorunlara çözüm sağlayan karmaşık standart alt program kümeleri olan çok sayıda komut içerir.

Cobol'da örnek "Merhaba dünya" programı

KİMLİK BÖLÜMÜ. PROGRAM-ID. SELAM DÜNYA. * ÇEVRE BÖLÜMÜ. * VERİ BÖLÜMÜ. * PROSEDÜR BÖLÜMÜ. PARAGRAF 1. EKRAN "Merhaba dünya.". * PROGRAMDAN ÇIKIŞ.

PL/1- (PL / I, Programlama Dili I - "Bir Numaralı Programlama Dili") - 1964'te geliştirildi, bilimsel, mühendislik ve iş odaklı bilgi işlem için tasarlanmış bir programlama dili. O kadar geniş bir sözdizimi ve yerleşik işlevler yelpazesi içerir ki, muhtemelen PL/1 dilinin tüm özelliklerini destekleyen tek bir derleyici yoktur. PL/1 özyinelemeyi ve yapılandırılmış programlamayı destekler ve ana uygulaması veri işlemedir.

PL/1'in ana özellikleri

  1. Serbest sözdizimi
  2. Anahtar kelimeler ve tanımlayıcılar büyük/küçük harfe duyarsızdır
  3. Varsayılan olarak (klasik anabilgisayar sürümlerinde - her zaman) parametreleri referansa göre iletin
  4. Sendikalı karmaşık yapılar için destek (Pascal dilinin terminolojisinde - değişkenli kayıtlar)
  5. Çoğu arasında üstü kapalı dönüştürme olasılığı bulunan yerleşik veri türlerinden oluşan son derece gelişmiş bir sistem
  6. Çeşitli dinamik bellek ayırma türleri
  7. Birçok sözdizimi seçeneğine sahip çok genel operatörler
  8. Kontrol yapılarının kesin olarak tanımlanmış semantiği
  9. Dizi İşlemleri
  10. Gelişen İstisna Koşullar Mekanizması
  11. Çoklu görev ve eşzamansız G/Ç için dil düzeyinde destek
  12. Karmaşık G/Ç erişimcileri için dil seviyesinde destek
  13. Çok gelişmiş ön işlemci, aslında PL/1'in bir alt kümesi

PL/1'deki "Merhaba dünya" programının bir örneği

Test: prosedür seçenekleri(ana); beyan My_String char(20) değişken startupize("Merhaba dünya!"); atlama listesi koy(My_String); son test;

Dil alfabesi

Orijinal alfabe PL/1 60 karakter içeriyordu:

$ @ # 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 0 1 2 3 4 5 6 7 8 9 = + - * / () , . " % ; : ¬ & | >< _ ? пробел

Aşağıdakileri içermeyen daha sınırlı 48 karakterlik bir alfabe ile çalışmak da mümkündü:

@ # ; : ¬ & | > < _ ? -

Eksik karakterler yerine ek anahtar kelimeler kullanıldı. Dilin modern versiyonlarında, küçük Latin harflerinin kullanılmasına da izin verilir (anahtar kelimeler hem büyük hem de küçük harflerle yazılabilir). Taşınabilir karakter setinde olmayan ¬ (olumsuzlama) karakteri yerine ~ kullanın.

Edebiyat

  1. Sverdlov S.Z. Programlama Dilleri ve Çeviri Yöntemleri: Ders Kitabı. - St. Petersburg: Peter, 2007. - 638 s.: hasta.

Ya. P. - bilgisayar yardımıyla bir problemi çözme sürecini kolaylaştırmak için insan tarafından geliştirilmiş yapay bir dil. Bu dil, ya sorunu çözmek için algoritmanın bir açıklamasına izin verir - o zaman denir prosedür odaklı veya problemin matematiksel formda ifadesi - problem odaklı.

Diller:

1. Evrensel (herhangi bir konu alanından görevler)

2. Uzmanlaşmış (dar bir alanda)

YaP seviyesi

1. Düşük (montajcı, sembolik)

2. Yüksek

tuhaflık: otomatik çeviri, PL'de yazılmış metnin makine komutları dilinde mantıksal olarak eşdeğer bir eylem dizisine çevrilmesi olasılığı vardır.

Yayın yöntemi:

1. Derleyici

2. Tercüman

3. Jeneratör

alfabe - metnin oluşturulması gereken sabit bir karakter kümesi.

sözdizimi - alfabenin karakterlerinden izin verilen yapıları tanımlayan bir kurallar sistemi. Resmi olarak tarif etmeye çalışıyorlar.

anlam bilimi- dil yapılarının yorumlanması için bir kurallar sistemi. Kesinlikle, resmi olarak, açık bir şekilde tanımlanmış, ancak serbest bir biçimde tanımlanmıştır.

3. Bir programlama dilinin sözdizimini resmi olarak tanımlamanın yolları

Sözdizimi = üst dil + sözdizimi diyagramları

Üstdil - başka bir dilin tanımlandığı özel bir üst dil.

Üst dil karakter seti:

< > - açılı ayraçlar (dil yapılarını içine alın)

{ } - kaşlı ayraçlar (içerdikleri kavramlar sıfır veya daha fazla kez ortaya çıkar)

– köşeli parantezler (ekteki kavram atlanabilir)

dikey çubuk(alternatif, "veya", | ), ::=, =.

SP sembolleri metadilde terminal sembolleri.

Alfabenin karakterlerinden inşa edilmiştir anlamsal dil yapıları. Bunların en basiti dilin kelimeleri.

Sözcük - dil sözcüğü, boşluk içermeyen bir karakter dizisi.

Sözcük türleri:

1. Tanımlayıcı - bir programı veya diğer nesneleri tanımlamak için kullanılır (bir işleve, türe vb. bir ad verin)

2. Anahtar sözcükler - Kullanma Talimatında sabitlenen hizmet tanımlayıcıları; dilin tam anlamsal yapılarını oluşturmak için kullanılırlar, bunlara denir teklifler dil.

3. Operatör - açıklama, tercümana bilgi aktarmak için gereken tanım. Operatör eylemleri tanımlamak için kullanılır, eylem birimidir.

Sözdizimi diyagramı - bir giriş kenarı ve bir çıkış kenarı ve etiketli köşeleri olan yönlendirilmiş bir grafiktir. Sözdizimi diyagramı dili tanımlar. Girdi kenarından çıktıya herhangi bir yol üzerindeki köşelerdeki etiket zinciri, sözdizimi diyagramı tarafından belirtilen dilin zinciridir. Bu nedenle, sözdizimsel diyagramın otomat dillerin üretken dilbilgisi biçimlerinden biri olduğunu varsayabiliriz.



Program nesneleri.

Belirli bir dilde anlamsal anlamı olan herhangi bir yapı. Yalnızca bir ad ve değerle değil, aynı zamanda bu değerin değerinin depolandığı bazı bellek alanıyla da ilişkilendirilen bir değer.

Aşağıdakiler ayırt edilir:

1. sabitler değişmez değerlerdir.

Sabitler, bir programdaki değerlerin bir listesidir. C programlama dilinde dört tür sabit vardır: tamsayı sabitleri, kayan nokta sabitleri, karakter sabitleri ve dizi sabitleri.

2. Değişkenler

C dilinin temel kavramlarından biri, bir nesnedir - adlandırılmış bir hafıza alanı. Bir nesnenin özel durumu bir değişkendir. Bir değişkenin ayırt edici bir özelliği, çeşitli değerleri, toplamı değişkenin türüne göre belirlenen adıyla ilişkilendirme yeteneğidir. Bir değişken değeri ayarlandığında, bu değerin kodu karşılık gelen hafıza alanına yerleştirilir. Bir değişkenin değerine erişim en doğal olarak ismiyle sağlanır ve bir hafıza konumuna erişim sadece adresiyle mümkündür. Her değişken programda kullanılmadan önce tanımlanmalıdır, örn. değişkene bellek tahsis edilmelidir. Bir değişken için ayrılan belleğin boyutu ve içeriğin yorumlanması, değişkenin tanımında belirtilen türe bağlıdır. Tamsayı türleri tanımlanır: char, uzunluğu en az 8 bit olan bir tam sayıdır, kısa int kısa bir tam sayıdır, int bir tam sayıdır, uzun bir uzun tam sayıdır. Tamsayı türlerinin her biri, imzalı işaretli veya imzasız imzasız olarak tanımlanabilir. Dil standardı şu gerçek türleri tanıttı: kayan nokta - tek kesinlik, çift - çift kesinlik, uzun çift - maksimum kesinlik.

3. fonksiyonlar.



İşlev programın diğer bölümlerinden gerektiği kadar çok kez erişilebilen bir programın adlandırılmış bölümüdür. İşlev tanımı, işlev çağrıldığında gerçekleştirilen eylemlerin sırasını, işlevin adını, sonucun gövdesini (dönüş değeri) ve işlev çağrıldığında gerçek parametrelerle (argümanlar) değiştirilen resmi parametreler kümesini belirtir. aranan.

Nesne tanımının genel görünümü

Adı yazın [başlatıcı];

Statik sınıfın nesneleri varsayılan olarak 0, cl değerini alır. harici - almayın.

nesne tanımlı sadece bir kere. Tanım gereği, nesnenin öznitelikleri ayarlanır, bellek ona tahsis edilir, nesnenin adı bellek alanının adresiyle ilişkilendirilir. Bir başlatıcı varsa, o zaman başlangıç ​​değeri de.

veri türü kavramı

Veri tipi bilgisayarda bir problem çözerken bu değeri kullanmanızı sağlayan bir niceliğin değeri hakkında bilgi kümesidir.

Bir veri türüyle ilişkili olanlar şunlardır: önceden tanımlanmış bir dizi değer (değer alanı), bu tür bir değer üzerinde gerçekleştirilebilecek bir dizi işlem, değeri depolamak için ayrılan belleğin boyutu ve yapı değeri. Değer Yapısı bir tür sınıfı tanımlar: basit veya karmaşık. Basit bir türün değeri bölünemez bir bütündür, karmaşık bir türün değeri ayrı parçalardan oluşur - karmaşık bir değerin öğeleri. Değer aralığı bu tür bir değişkende temsil edilebilecek minimum değerden maksimum değere kadar olan aralıktır.

Değişkenler, bildirimlerinin bulunduğu yerde başlatılabilir.

Tip sistemi uygulama çözümlerinin kullandığı verilerin düzenlendiği özel bir sistemdir. Tip sistemi, gerçek dünyanın bilgilerini Ya.P için "anlaşılır" terimlerle temsil etmenizi sağlar.

Basit bir tür kavramı.

basit tip- nesneleri (değişkenler veya sabitler) programcının erişebileceği bir dahili yapıya sahip olmayan bir veri tipi.

Anlam herhangi bir parçaya bölünemez

Bir bütün olarak tüm değer üzerinde işlemler.

ayrılır:

Temel- tüm bileşenleri geliştirici tarafından zaten tanımlanmış olan basit bir skaler veri türü; adlı

programcı tarafından genişletilmiş- Geçerli değerler kümesini programcının kendisi belirler

C'de önceden tanımlanmış basit skaler tipler (bunlara temel tipler denir):

– tamsayı türleri: char, int, uzun int;

– kayan tipler: kayan nokta, çift, uzun çift.

Tamsayı türü char, karakter değerlerini (karakter türü) temsil etmek için de kullanılır. Tamsayı türlerinin iki biçimi vardır - imzalı (imzalı) ve imzasız (imzasız). Kısaca, imza atılabilir.

Şunları içerir:

izin verilen değerler kümesi

izin verilen işlemler kümesi

depolama için ayrılan RAM boyutu (char - 1b, int - 2b, uzun - 4b)

değerin dahili gösterimi (pozitif bir tamsayı - ikili değer, negatif tamsayı - ikili tümleyen, vb.)

değer yapısı

Karmaşık tipler

Zor(bileşik) bir çeşit- nesneleri (değişkenler veya sabitler) programcının erişebileceği bir dahili yapıya sahip olan bir veri tipi.

Karmaşık türler, bu türdeki herhangi bir değerin, bir şekilde tek bir bütün halinde birbirine bağlı birçok bileşenden (öğe) oluşmasıyla karakterize edilir; karmaşık bir yapıya sahiptir.

Karmaşık bir tip göre inşa edilmiştir aşağıdaki kurallar.

1. Karmaşık bir yapının bir elemanı hem basit hem de karmaşık bir yapıya sahip olabilir. Bu nedenle, karmaşık türlerin değerleri genellikle hiyerarşik bir yapıya sahiptir ve en alt düzeyinde yalnızca basit bir türün öğeleri bulunur (iç içe geçme düzeyi sınırlı olabilir veya olmayabilir).

2. Karmaşık bir yapı içinde, tüm elemanların tipi: - aynı - homojen bir yapı, - farklı - heterojen bir yapı olabilir.

3. Yapıdaki elemanların sayısı: – yapının ömrü boyunca sabitlenebilir (sabit boyutlu veya statik yapılar); – değişkenler, yani yapıyla çalışırken öğeleri dahil ederek veya hariç tutarak dinamik olarak değiştirin (değişken boyut veya dinamik yapılar).

4. Yapı elemanlarına referans (erişim) şu şekilde olabilir: - doğrudan (doğrudan) - hesaplanabilir (yapıdaki dizin veya yere göre) veya hesaplanamaz (eleman adına göre); - sıralı - değişken büyüklükteki yapıların özelliği. Temyiz türü, bileşenlerin tek bir yapıda birleştirilmesiyle belirlenir.

5. Yapının değeri, operasyonel (dahili yapı) veya harici bellekte saklanabilir.

Diziler, dizeler

Normal bir tür (dizi), tek tip sabit boyutlu bir yapıya ve öğelere doğrudan bilgisayarlı erişime sahip karmaşık bir türdür. Dizi bildirildiğinde yapının boyutu sabitlenir. Dizi öğeleri, bitişik bir bellek alanı kaplar, yani. sırayla birbiri ardına yerleştirilir. Bir dizideki öğeler sıfırdan başlayarak numaralandırılır.

Normal türde (dizi) bir değişken ayarlamak şu şekildedir:

<спецификация типа> <идентификатор> [<константное выражение>]

Burada köşeli parantezler uç karakterlerdir.

sabit ifade dizideki bileşen sayısını tanımlar, dolayısıyla değeri tamsayı türündedir.

tanımlayıcı dizi değişkeninin adıdır.

Bileşenlerin türü ayarlandı tip belirtimi. Bileşenlerin türü herhangi biri olabilir (dosya hariç). Bileşenlerin türü basitse, belirlenen yapı tek boyutlu (doğrusal), karmaşıksa çok boyutlu (doğrusal olmayan) olacaktır.

çok boyutlu dizi elemanları dizi tipinde olan bir dizidir. Çok boyutlu bir dizi belirtme:

<спецификация типа> <идентификатор> []…

Burada K1 , K2,...,Kn sabit ifadelerdir. Ayrıca K1, dizinin boyutunu birinci boyutta, K2 - ikinci boyutta ve Kn - n. boyutta ayarlar. Örneğin, x tanımı, k1 öğelerinden oluşan bir x dizisini belirtir. x'in her elemanı, k2 elemanından oluşan dizi tipindedir. Aksi takdirde, x'in olduğunu söyleyebiliriz iki boyutlu dizi(matris), burada k1 birinci boyuttaki boyuttur, yani iki boyutlu bir dizideki satır sayısı - bir matris; k2, ikinci boyuta göre boyuttur, yani matristeki sütun sayısı. Böylece, iki boyutlu bir dizi, her elemanı aynı zamanda bir boyutlu bir dizi olan tek boyutlu bir dizi olarak ele alınır. Matris elemanları bilgisayar belleğinde satırlar halinde saklanır.

Dizi öğelerine erişmek için dizinin adını ve öğenin yapıdaki yerini (dizin) belirtmelisiniz: dizi adı [<индекс>] veya dizi adı [<индекс1>][<индекс2>]…[<индекс n>] sırasıyla tek boyutlu ve n boyutlu diziler için. Dizin, değeri bir tamsayı türü olması gereken ve bileşenin numarasını belirten bir ifadeyle verilir. İndeks değeri sıfırdan dizinin boyutu eksi bire kadar olan aralıktadır.

Bir dizi öğesine başka bir şekilde - bunun için bir işaretçi kullanarak - başvurabilirsiniz. İşaretçi, değeri başka bir değişkenin adresi olan bir değişkendir, örn. değişken için ayrılan bellek biriminin numarası (adresi). Bir işaretçi yalnızca belirtilen türdeki nesnelere başvurabilir. Bir dizinin adı, dizinin ilk elemanına sabit bir işaretçidir.

Teller. Bir "dize" türünün değeri, bir karakter dizisidir ("dize" sözcüğü tırnak içine alınmıştır, çünkü böyle bir tür C'de açıkça tanımlanmamıştır ve bir dize türünden bahsederken, sahip bir veri türünü kastediyoruz. bir dize türünün özellikleri). "Dize" türü (veya yalnızca dize), C'de dizi türünün bir alt kümesi olarak kabul edilir. Dize, elemanları karakter olan tek boyutlu bir dizi tarafından verilir, dizinin son karakteri “\0” dır. Bu "boş karakter", dizenin sonunun bir işaretidir. "\0" karakteri ve diğer karakterler dizeye dahildir. Dize boyutu (karakter sayısı), çözülmekte olan soruna göre belirlenir ve kullanılabilir bellekle sınırlıdır.

Dize türü özel bir dizi olduğundan, normal türün tüm özellikleri dize için korunur (yani, temel tür için izin verilen işlemler tek tek öğeler üzerinde gerçekleştirilebilir). Diğer karakterlerde olduğu gibi (ana amacını unutmadan) "null karakteri" ile çalışabilirsiniz.

Kaynak metin kural olarak, sınırlayıcı karakterlerle ayrılmış ve bir metin sonlandırıcı karakterle biten sözcüklerden oluşan bir karakter dizisidir. Görüntülenecek bir veri yapısı seçerken

metin, metnin gerekli minimum bellek miktarını kaplamasını sağlamaya çalışmalıdır ve seçilen yapı, kural olarak sözcükler olan metnin öğelerine hızlı (doğrudan) erişim için araçlar sağlar. Bu gereksinimler, bir dizi olan veri yapısı tarafından karşılanır.

Metin hayal edilebilir:

İki boyutlu bir dizi - satırı, satır sonu karakteri '\0' ile biten bir metin sözcüğü olan bir matris. Sütun sayısı, maksimum kelime uzunluğu artı bire eşittir ('\0' karakteri). Satır sayısı, metindeki maksimum kelime sayısına eşittir. Bir matris satırına erişim, bir kelimeye erişimdir. Böyle bir yapı oluşturmak için, metni karakter karakter okumanız, birbirini izleyen her kelimeyi matrisin yeni bir satırına yerleştirmeniz ve kelimeye '\0' karakterini eklemeniz gerekir.

Tek boyutlu bir dizi - bir dize. Bu yapı, metnin dış temsiliyle tamamen tutarlıdır. Dizinin boyutu, dikkate alındığında kaynak metnin maksimum uzunluğuna eşittir.

ayırıcılar. Bir kelimeye atıfta bulunmak için, dizinin karakterlerine sırayla bakmak, mevcut kelimeyi ve ardından yeni bir kelimeyi bitiren bir sonraki sınırlayıcı karakteri bulmak gerekir. Böylece bir sonraki kelime satırın sonu işaretiyle bitene kadar devam ediyoruz.

9. Heterojen tipler (yapı)

Heterojen bir tür (yapı, kayıt), en keyfi nitelikteki veri yapılarını oluşturmanıza olanak tanır. Oldukça karmaşık, heterojen bir yapıya sahip nesneleri temsil etmek için kullanılır ve kural olarak çeşitli bilgi sistemleri oluşturmak için kullanılır. Heterojen bir tür değeri, farklı türlerde sabit sayıda öğeden (alanlardan) oluşur, bu nedenle her öğenin, öğeye erişmek için kullanılan benzersiz bir adı olmalıdır.

Programcının kendisi, "iç yapısını" belirleyen heterojen (yapısal) bir türü tanımlar: öğelerin sayısı, türleri ve adları. Heterojen tipin tanımı:

yapı<имя структурного типа>

{ <определения элементов> };

Burada yapı– hizmet kelimesi – yapısal tip belirteci, <имя структурного типа> programcı tarafından keyfi olarak seçilen bir tür tanımlayıcıdır (<имя структурного типа>ihmal edilebilir) <определения элементов> – her biri tanıtılan yapı tipinin eleman tipini tanımlayan bir veya daha fazla nesne tanımından oluşan bir koleksiyon.

Adlandırılmış bir yapı türündeki bir nesnenin (örneğin, bir değişken) tanımı yapı biçimindedir.<имя структурного типа> < список структур>;

veya<имя структурного типа> < список структур>; nerede< список структур>– programcı tarafından seçilen yapı adlarının listesi.

Yapısal tip değişkenleri, tip bildirimi ile eş zamanlı olarak tanımlanabilir. İsimsiz bir yapısal tipteki bir nesnenin tanımı şöyledir:

{ <определения элементов> } < список структур>;

Böylece, yapılar(değişkenler) adsız yapı türü belirlenen eşzamanlı türün kendisinin bir açıklaması ile. Bu seçenek için kullanılır bekar yapı tanımları. Yapıların elemanları herhangi bir tipte olabileceğinden, yapıların iç içe geçmesine izin verilir, örn. bir yapı elemanı başka bir yapı olabilir. Bu durumda yapı tiplerinin beyanı, beyanda kullanılan yapı tipi daha önce tanımlanmış olacak şekilde yapılmalıdır.

Bir yapı tanımlanırken, başlatıldı. Yapısal tipte bir nesne tanımlanırken, tahsis edilir hafıza tüm öğelerin verilerinin barındırılabileceği bir miktarda. Bir yapı için ayrılan bayt cinsinden belleğin boyutu, sizeof (yapı noktası) gibi sizeof işlemi kullanılarak elde edilebilir. Bir yapının elemanlarına erişmek için şunu kullanın: nitelikli isim formun (birincil ifade)<имя структуры> . <имя элемента структуры>Burada nokta, yapı elemanına erişim işlemi anlamına gelir, en yüksek önceliğe sahiptir. Nitelikli yapı elemanları adları, karşılık gelen türlerdeki nesnelerin tüm haklarına sahiptir. Yapının türlerine göre izin verilen elemanları üzerinde işlemler gerçekleştirebilirsiniz.

Yapı, bir işlev parametresi ve bir dönüş (ana) işlev değeri olabilir.

Işaretçi

İşaretçi, değeri başka bir değişkenin adresi olan bir değişkendir, örn. değişken için ayrılan bellek biriminin numarası (adresi). Bir işaretçi yalnızca belirli bir türdeki nesnelere atıfta bulunabilir (bir değişkenin adı, dizi, yapı, dize hazır değeri tanımlayıcı görevi görebilir). Bir değişken işaretçi olarak bildirilirse, herhangi bir türde skaler değerin bulunabileceği bir bellek adresi içerir. İşaretçi tipinde bir değişken bildirirken, adresi değişkenin içereceği veri nesnesinin türünü ve önünde bir yıldız (veya bir yıldız grubu) bulunan işaretçinin adını tanımlamak gerekir. İşaretçi bildirim biçimi:

tip belirleyici [ değiştirici ] * tanımlayıcı.

tip belirleyici nesnenin tipini belirtir ve herhangi bir temel tip, yapı tipi, karışım olabilir (bu aşağıda tartışılacaktır). Bir tür belirtici yerine void belirterek, işaretçi tarafından başvurulan türün belirtimini bir şekilde erteleyebilirsiniz. Bir geçersiz türe işaretçi olarak bildirilen bir değişken, herhangi bir türdeki bir nesneye başvurmak için kullanılabilir. Ancak, işaretçiler veya işaret ettikleri nesneler üzerinde aritmetik ve mantıksal işlemler yapabilmek için, her işlemi gerçekleştirirken nesnelerin türünü açıkça tanımlamak gerekir. Bu tip belirlemeler, bir döküm işlemi kullanılarak gerçekleştirilebilir.

const, yakın, uzak, büyük anahtar sözcükleri, bir işaretçi bildirirken değiştiriciler olarak işlev görebilir. Const anahtar sözcüğü, işaretçinin programda değiştirilemeyeceğini belirtir. İşaretçi olarak bildirilen bir değişkenin boyutu, bilgisayar mimarisine ve programın derleneceği bellek modeline bağlıdır. Farklı veri türlerine yönelik işaretçilerin aynı uzunlukta olması gerekmez.

Yakın, uzak, büyük anahtar kelimeler işaretçi boyutunu değiştirmek için kullanılabilir.

Dosyalar.

Dosya tipi- bu, programı bilgisayarın harici aygıtlarına bağlayan türdür. Bir dosya tipi değeri, rastgele uzunlukta bir bileşen dizisidir.

Dosya boyutu (yani dizinin uzunluğu) dosya bildirilirken hiçbir şekilde belirtilmez ve yalnızca harici bellek cihazlarının kapasitesi ile sınırlıdır. Dosya sonu işareti yapının sonunu belirtmek için kullanılır.

C'de bir dosya, verilerin değiş tokuş edildiği belirli cihazdan bağımsız olarak bir akış veya karakter dizisi (bayt) olarak ele alınır. Bir akışla değiş tokuş yaparken, ana belleğin akış arabelleği (giriş arabelleği, çıktı arabelleği) adı verilen yardımcı bir bölümü sıklıkla kullanılır.

Bir akışla çalışırken aşağıdakileri yapabilirsiniz:

Akışları açın ve kapatın;

Akışın sonuna (dosyanın sonuna) ulaşma durumunu ve G/Ç hatalarını analiz edin;

Akıştaki mevcut konuma bir işaretçi alın ve ayarlayın;

Akış arabelleğe almayı ve arabellek boyutunu yönetin.

Tüm G/Ç işlemleri, C kitaplığında bulunan işlevler kullanılarak gerçekleştirilir. Bu işlevleri kullanmak için, G/Ç işlevi prototiplerini, sabit tanımlarını, türleri ve işlevlerin çalışması için gerekli yapıları içeren stdio.h başlık dosyasını programınıza eklemelisiniz. Akış, metin veya ikili modda açılabilir. Buna göre, metin dosyaları ve ikili dosyalar ayırt edilir.

içinde bir dosya açarken metinsel modunda, akıştan okunan karakter dizisi, gerekirse karakter gösteriminden dahili gösterime dönüştürülür. Örneğin, eğer format ile Suda sayısal bilgi okunur, ardından okunan karakter dizisi, format belirtimine uygun olarak bir ikili tamsayıya veya bir kayan noktalı sayıya dönüştürülür; biçimli para çekme sayısal bilgi, sayının dahili temsilinden sayıyı temsil eden bir karakter dizisine dönüştürülür. Bir metin dosyasında saklanan bir dizi karakter satırlara bölünebilir. Metin akışına bir yeni satır karakteri '\n' yazıldığında, bir dizi CR (“satır başı”) ve LR (“satır besleme”) karakterleri ile değiştirilir. -de

bir metin dosyasından okurken, CR ve LR karakterlerinin sırası, tek bir yeni satır karakteri olan '\n'ye dönüştürülür.

Dosya metin bilgilerini değil, ikili bilgileri depoluyorsa, dönüştürme yapılmamalıdır. Örneğin, dosya dahili gösteriminde sayısal bilgiler yazılır (ve sonra okunur). Böyle bir dosya ikili olarak açılmalıdır.

Fonksiyonlar biçim değişimi her türden bireysel karakterlerin, dizilerin, tamsayıların ve gerçek sayıların giriş/çıkışları için tasarlanmıştır. Girişte, veriler arabelleğe alınır ve ardından bayt bayt veya yığınlar halinde kullanıcı programına aktarılır. Verileri bir dosyaya gönderirken, önce arabellekte toplanırlar ve arabellek dolduğunda, dosyaya tek bir çağrıda tek bir blok olarak yazılırlar. Bu nedenle, bir arabellek kullanımı, dosyayla yapılan alışverişlerin sayısını azaltır. Bir dosya açıldığında arabellek varsayılan olarak programa tahsis edilir.

İşlev, dosya işaretçisinin geçerli konumunu gösteren bayttan başlayarak giriş akışından bir karakter dizisini okur. Bir boşluk karakteriyle karşılaşılırsa veya dönüştürme belirtiminde belirtilen sayıda karakter okunmuşsa giriş sonlandırılır. Okunan karakter dizisi, biçim dizgisine göre (biçim dizgisi ilk karakterden sonuncuya doğru sıralı olarak taranır) bir tamsayı veya gerçek sayının veya tek bir karakter veya karakter dizisinin karakter gösterimi olarak yorumlanır. Daha sonra dahili bir gösterime dönüştürülür ve bağımsız değişkenler listesinden bir sonraki değişkenin bellek alanına yazılır (mevcut dosya konumuna işaretçi, okunan bayt sayısına göre yeni bir geçerli konuma taşınır).

Bu işlem, biçim dizesi tükenene veya dosyanın sonuna ulaşılana veya bir hata oluşana kadar devam eder. İlk durumda, işlev girişte değer alan nesne sayısını döndürür; dosyanın sonuna ulaşıldığında EOF sabitini döndürür; bir hata durumunda -1 değerini döndürür.

İşlev, biçim dizesini soldan sağa tarar, karşılaşılan tüm rasgele karakterleri dosyaya verir, bir dönüştürme belirtimi ile karşılaşıldığında, bağımsız değişkenler listesinden karşılık gelen ifadenin değerini hesaplar, onu dahili temsilden bir diziye dönüştürür. belirtime uygun olarak karakterler ve geçerli dosya konumuna çıktı verir. Her bağımsız değişken için bir dönüştürme belirtimi belirtilmelidir. Spesifikasyonlardan daha az argüman varsa, sonuç şunlara bağlıdır:

dilin uygulanmasından. Çıktı, biçim dizesi tükendiğinde veya bir hata oluştuğunda sona erer. İşlev, yazdırılan karakter sayısını ve hata durumunda negatif bir sayı döndürür.

İkili modda, herhangi bir bellek alanının içeriği, dahili gösterimden dönüştürülmeden bir dosyaya yazılabilir. Bu nedenle, bellekteki ve ikili dosyadaki veri temsil biçimi aynıdır. Bu nedenle, bir ikili dosyadan okurken dahili gösterime dönüştürme gerekli değildir. Fread ve fwrite işlevleri, bir ikili dosya ile değiş tokuş yapmak için kullanılır.