Jozibasi (dasturlash tili) - Charm (programming language)

Jozibali
ParadigmaTarkibiy dasturlash
LoyihalashtirilganP. Nowosad
Birinchi paydo bo'ldi1996
OSRISC OS
Veb-saytjozibasi.qu-bit.co.uk
Ta'sirlangan
RTL / 2, C, Paskal

Jozibali bu kompyuter dasturlash tili o'xshashlik bilan 1990-yillarning boshlarida ishlab chiqilgan RTL / 2, Paskal va C tillarning o'ziga xos xususiyatlarini o'z ichiga olganligi bilan bir qatorda. Jozibasi tili a bilan belgilanadi kontekstsiz grammatika tomonidan ishlov berilishi mumkin rekursiv tushish tahlilchisi seminal kitoblarda tasvirlanganidek kompilyator dizayn.[1][2]

Acorn bozori uchun chiqarilgan kompilyator, montajchi va bog'lovchini o'z ichiga olgan Charm vositalarining to'plami ko'rib chiqildi Acorn foydalanuvchisi jurnal[3] dasturiy ta'minot kategoriyasi ostida. Jozibasi qayta ishlandi RISC OS Keyinchalik platformalar Arxiv jurnalida ko'rib chiqildi.[4]

Jozibasi qo'shimcha ravishda elektron kitobda tasvirlangan Raspberry Pi-da jozibali dasturlash.[5]

Grammatika

Jozibasi grammatikasining ta'rifi Backus-Naur shakli Charm konstruktsiyalarining tavsiflovchi misollari bilan birga Jozibada aniqlangan til sahifasi.[6]

Til blok tuzilgan bo'lib, har bir blok blokda bajariladigan operatsiyani tavsiflovchi til kalit so'zi bilan kiritiladi. uchun, esa, takrorlang (takrorlash), ish, agar (tanlov). Har bir blok tomonidan yopilgan { va } ajratuvchilar. Bundan tashqari, blok ichidagi til satrlari odatda aniqlik uchun kiritiladi, ammo bo'sh joy e'tiborga olinmasligi sababli bu talab qilinmaydi.

Har bir grammatik jihatdan mos keluvchi matn bajariladigan kodlar to'plami va tegishli ma'lumotlar to'plamini aks ettiradi, ular ma'lumotlar to'plamini ishlash kabi foydali ishlarni bajarish uchun taqdim etadigan xizmatlardan foydalangan holda operatsion tizim ostida ishlashi mumkin bo'lgan dasturni yig'ishda Charm vositasi tomonidan ishlatilishi mumkin. yoki a orqali foydalanuvchilar bilan o'zaro aloqada bo'lish grafik foydalanuvchi interfeysi (GUI).

Ma'lumot turlari

Jozibasi kuchli yozilgan til, ammo raqamli va suzuvchi nuqta turlari o'rtasida aniq konversiyalarga yo'l qo'ymaydi. Quyidagi asosiy o'zgaruvchilar turlari qo'llab-quvvatlanadi:

  • int - butun sonlar
  • char - belgilar
  • mantiqiy - mantiqiy qiymatlar (to'g'ri yoki yolg'on)
  • haqiqiy - suzuvchi nuqta raqamlari

Bir xil turdagi ma'lumotlar agregatlari e'lon yordamida statik ravishda ishga tushirilishi mumkin qator kalit so'z va ular ko'p o'lchovli bo'lishi mumkin. Yordamida har xil turdagi agregatlar e'lon qilinishi mumkin yozuv kalit so'zi, va bunday deklaratsiyaga a ni belgilashga ruxsat beriladi birlashma saqlashni taqsimlash nuqtai nazaridan bir-birini qoplaydigan yozuv maydonlarining. Modullar statik va dinamik ma'lumotlar a'zolari aralashmasini ham to'plashi mumkin. Ikkala yozuvlar va modullarning nusxalari (faqat dinamik tarkib) stakada yoki stendda o'rnatilishi mumkin yangi operator. Modullar konstruktorni ham belgilashi mumkin ~ yangi dinamik ma'lumotlarni boshlash uchun protsedura va mos keladigan ~ yo'q qilish resurslarni C ++ tiliga o'xshash tarzda chiqarish uchun dekstruktor protsedurasi.

Yo'naltiruvchi ma'lumot

Modul doirasidagi ma'lumotlar yoki protseduralar eksport kalit so'z. Agar modul boshqa Charm modulidagi protsedura yoki ma'lumotlarga murojaat qilishni xohlasa, buni Import kalit so'z. Modullar tarkibiga e'lon qilingan protseduralar orqali kirish mumkin bo'lgan misolga asoslangan a'zoning o'zgaruvchilarini o'z ichiga olishi mumkin dinamik yopiq birinchi parametr orqali kalit so'z bu ko'rsatgich.

Ma'lumotlarning konstruktsiyalari va protseduralariga havolalar ref kalit so'z. Buning yordamida ularni ajratib ko'rsatish mumkin val kalit so'z. Malumot o'zgaruvchilaridan foydalanganda taqqoslash operatorlari ikkita mos yozuvlar o'zgaruvchisi ma'lumotlarning bir xil elementiga murojaat qilishini tekshirishi mumkin ( :=: ) yoki ular ko'rsatgan ma'lumotlar bir xil bo'ladimi ( = ).

Misol

Asl klassik Salom dunyo dasturi Jozibada yozilgan:

    ext proc write_string (ref array char); modul salom; ent proc start (); write_string ("Salom dunyo"); end_proc; end_module;

va sintaktik tilning evolyutsion o'zgarishidan so'ng unga teng keladigan so'nggi versiya:

    import lib.Out; modul Salom {export proc ~ start () {Out.vdu.str ("Salom dunyo"). nl (); }}

Asboblar to'plami

Asboblar to'plamining bajarilishida Charm manba kodi va assembler manba kodidan ob'ekt fayllarini yaratish uchun kompilyator va assambleyer ta'minlanishi kutilmoqda, ular bajarilishi mumkin bo'lgan dasturni yaratish uchun kutubxona va ish vaqtini qo'llab-quvvatlash fayllari bilan birlashtirilishi mumkin.

Yozish paytida faqat bitta Jozibasi vositasi to'plami o'rnatish yuklab olish uchun mavjud (bepul). Asboblar o'zlari Jozibasi tilida yozilgan va manba kodi GNU umumiy jamoat litsenziyasi. Ular yugurmoqdalar RISC OS ARM protsessorli kompyuterlar va platformalar (masalan Raspberry Pi ) va Windows yoki Linux platformalarida joylashgan RISC OS uchun emulyatorlarda (masalan RPCEmu ). VFP versiyasi 2 koprotsessor arxitekturasini qo'llab-quvvatlovchi ARM chiplariga asoslangan platformalar uchun qo'shimcha qurilmalar yordamidagi ikki tomonlama suzuvchi nuqta operatsiyalari uchun kod ishlab chiqarish qo'llab-quvvatlanadi.

Tuzuvchi

Charm kompilyatori - bu to'rtburchak shakllarni yaratish uchun Charm manba kodini ajratib ko'rsatadigan rekursiv tushish bo'yicha bitta o'tish kompilyatori. natija: = lhs op rhs arifmetik, mantiqiy va boshqaruv operatsiyalari oqimini qo'llab-quvvatlovchi oraliq tilda. Ma'lumotlar vaqtincha saqlanadi, ular registrlar va kompilyatorning orqa uchidagi xotira joylariga beriladi. Ikkala orqa uchi hozirda mavjud, ulardan biri ishlab chiqaradi Motorola 68000 assambleya tili va boshqasi ishlab chiqaradi ARM arxitekturasi.[7]

Salom dunyosining to'rtta chiqishi quyidagicha:

       param l1 $ call write_string [proc (ref array char) void]

va assembler chiqishi:

	mag'lubiyat	"Salom"	xdef	_start	tekislang_start	xref	_write_string	stmfd	sp!,{rp}	adr	r0,_l1 $	bl	_write_string	ldmfd	sp!,{kompyuter}	manzil	tekislang_l1 $	mag'lubiyat	"Salom Dunyo"	to'g'ridan-to'g'ri	oxiri

Charm-ning so'nggi nashrlarida I / O protseduralar o'zlarining modullariga bo'lingan Yilda va Chiqdi. Boshqa standart kutubxona protseduralari maydon sifatida protseduraga havola qilingan yozuvlar to'plamida tashkil etilgan. Ushbu qayta tashkil etish doirasida yozuv_string usuli endi kutubxona moduli orqali ishga tushiriladi Chiqdi statik a'zolar ma'lumotnomasi orqali .vdu protsedura sifatida str ya'ni yuqoridagi salom dunyosidagi misolda write_string ("Salom dunyo") bo'ladi Out.vdu.str ("Salom dunyo").

Yig'uvchi

Assembler mnemonika ko'rsatmalarini, ma'lumotlar deklaratsiyasini va ko'rsatmalarini qabul qiladi va maqsad protsessorning protsessori tomonidan tushunarli bo'lgan ma'lumotlarni, xususan ikkilikda kodlangan ko'rsatmalarni o'z ichiga olgan ob'ekt faylini yaratadi.

@ .Arm.hello-ning assambleyer ro'yxati
 1 0000: 6D795F6D 2  3  4  5  6 0000: E92D4000 7 0004: 8 000C: EBFFFFFE 9 0010: E8BD800010 11 12 13 0000: 48656C6C
	mag'lubiyat	"Salom"	xdef	_start	tekislang_start	xref	_write_string	stmfd	sp!,{rp}	adr	r0,_l1 $	bl	_write_string	ldmfd	sp!,{kompyuter}	manzil	tekislang_l1 $	mag'lubiyat	"Salom Dunyo"	to'g'ridan-to'g'ri	oxiri

Bog'lovchi

Bajariladigan dasturni yaratish uchun bog'langan Charm modullaridan bittasida va bittasida imzolardan biriga mos keladigan protsedura bo'lishi kerak:

   export proc ~ start () export proc ~ start (int argc, ref array ref array char argv)

Bu asosiy funktsiyaga o'xshashdir C va Java tillar. Bu yerda arg buyruq satrida o'tgan parametrlar sonini va argv qatoriga havola mavjud argc + 1 satrlar (har bir pozitsion parametr uchun bitta satr tartibda va tugatish nol).

Bunga qo'shimcha ravishda, modullar ixtiyoriy ravishda imzolarga mos keladigan dasturni ishga tushirish va o'chirishda statik ishga tushirish va o'chirish protseduralarini o'z ichiga olishi mumkin:

   export proc ~ startup () export proc ~ shutdown ()

Bog'lovchi dasturni bajarish uchun operatsion tizim tomonidan talab qilinadigan har qanday kerakli sarlavha ma'lumotlarini qo'shadi va ish vaqti muhitini (ma'lumotlar va stek ko'rsatkichlari) o'rnatadigan va boshqaruvni boshlash protsedurasiga o'tkazadigan ish vaqti kutubxonasini yig'uvchilarni qo'llab-quvvatlash kodini ishlashini ta'minlaydi. arizaning.

Dasturni shakllantirish uchun bog'langan barcha modullarning nomlarini aks ettiruvchi xarita fayli, global ma'lumotlar va kod havolalari bilan birga ixtiyoriy ravishda tuziladi, bu disk raskadrovka va profillar tomonidan ishlatilishi mumkin.

Adabiyotlar

  1. ^ ISBN D-201-10073-8 Aho, Ullman Kompilyatorni loyihalashtirish asoslari
  2. ^ ISBN D-201-10194-7 Aho, Seti, Ullman Tuzuvchilarning printsiplari, uslublari va vositalari
  3. ^ 1996 yil iyun oyida Stiven Veyd Acorn User Magazine, Jozibasi yoki bezakmi?
  4. ^ Geyvin Vreyt (2012 yil yanvar-fevral). "Arxiv jurnali". Arxivlandi asl nusxasi 2016-03-04 da. Olingan 2012-03-18.
  5. ^ Iyun 2013 Kindle elektron kitobi Raspberry Pi-da jozibali dasturlash
  6. ^ Charm RISC OS, til sahifasi
  7. ^ ISBN  0-9512579-0-0 Piter Kokerell ARM Assambleyasi tillarini dasturlash

Tashqi havolalar