مشخصات رسمی زبان
نسخه ۱.۰ · زبان برنامهنویسی آزرا
مشخصات رسمی زبان — نسخه ۱.۰
Imvoke(:"system/64/user…")
World-type(:Azra , [ip = 1234])
name int, float
-- } space for main code
Extract : 123456
int, float
Extract(:Hello World)
*for more than 50 character use "str"
str
Delog{int, float, str…}
این خط برای وارد کردن متغیرهایی که به آنها نیاز داریم استفاده میشود؛
در غیر این صورت میتوان این خط را حذف کرد.
Submit(:1.azr)
نسخه ۱.۰
نوع سند: مشخصات رسمی زبان
در آزرا، هر متغیر باید از یک الگوی دقیق و قابل تشخیص پیروی کند. این ساختار به سیستم اجازه میدهد تعریف متغیرها را بهدرستی تشخیص داده و تفسیر کند.
-<VariableNumber><VariableName> = <Value>-
کاراکترهای خطتیره ابتدایی و انتهایی (-) بهعنوان مرزهای ساختاری عمل میکنند. اگر هرکدام از این خطتیرهها وجود نداشته باشد، سیستم قادر به تشخیص تعریف نخواهد بود و یک خطای نحوی (Syntax Error) رخ میدهد.
هر تعریف متغیر باید با یک خطتیره (-) شروع شود.
صحیح: -0x = 2-
غلط: 0x = 2
هر متغیر باید دارای یک شاخص عددی باشد که دقیقاً قبل از نام متغیر قرار میگیرد.
0 شروع میشود.مثال (سومین متغیر): -2msg = Hello-
نکته: مقادیر اعشاری بر قوانین شمارهگذاری تأثیری ندارند.
تنها عددی که پیش از نام متغیر مجاز است، شاخص همان متغیر است.
غلط: -42A = Hello-
اعداد تنها زمانی میتوانند درون نام متغیر ظاهر شوند که بعد از یک حرف بیایند.
صحیح: -1Am1r = 10- -2x2 = 5-
هر تعریف متغیر باید با یک خطتیره (-) پایان یابد.
صحیح: -3b = Hello World3-
غلط: -3b = Hello World3
عدم وجود خطتیره پایانی منجر به خطای نحوی متغیر باز (Open Variable Syntax Error) میشود.
رشتههایی با کمتر از ۵۰ کاراکتر میتوانند بدون علامت نقلقول نوشته شوند.
مثالها: -1y = Hello World- -2z = Hi-
رشتههای با ۵۰ کاراکتر یا بیشتر باید داخل علامت نقلقول دوتایی (") قرار گیرند.
مثال: -3longMsg = "This is a long text containing more than fifty characters…"-
علامت تکنقلقول (' ') توسط آزرا شناخته نمیشود و باعث خطای نحوی میشود.
غلط: -1x = 'Hello'-
اگر رشتهای با ترکیب عدد و حرف شروع یا پایان یابد، همچنان بهعنوان رشته در نظر گرفته میشود.
مثالهای معتبر:
-1y = 1Hello World-
-2z = Hello 1 World-
-3b = Hello World3-
سیستم نوع مقدار را با استفاده از منطق زیر تعیین میکند:
@ یا ref: باشد ← نماد / ارجاع (Symbol / Reference)ارجاعهایی مانند @2 مقادیر مستقل نیستند. هنگام استفاده در دستورات پشتیبانیشده (مانند Extract) باید داخل پرانتز قرار گیرند.
صحیح: Extract(:@2)
غلط: Extract : @2
اگر رشتهای شامل چند کلمه باشد، حتی اگر کمتر از ۵۰ کاراکتر باشد، استفاده از نقلقول دوتایی برای وضوح بیشتر توصیه میشود.
توصیهشده: -0name = "Amir Hosseini"-
= انعطافپذیر و سلیقهای است. همه این موارد معتبرند: -0x = 2- ، -0x = 2 - ، -0x=2--0x = 5- و سپس -2y = 10- (شاخص ۱ موجود نیست).-1x = 5--0 1name = 2- ، -3 12x = ok-_. هیچ کاراکتر دیگری مجاز نیست.-0a = "1Hello"- ، -1code = 1xTest-. غلط: -0a = 1-@2 را نمیتوان مستقیماً به یک متغیر انتساب داد. غلط: -0ref = @2-. نمادها باید از طریق ساختارهای پشتیبانیشده استفاده شوند: Extract(:@n)سیستم هدف به سیستمی گفته میشود که کد روی آن اجرا خواهد شد. این سیستم دو شکل ممکن دارد:
فایل حاوی کد باید تنها با استفاده از اعداد نامگذاری شود. مثالها: 1.azr ، 561.azr. هیچ کاراکتر حرفی در نام فایل مجاز نیست.
یک فایل آزرا فقط میتواند به فایلهای دیگری که به همان زبان (AZR) نوشته شدهاند متصل شود. اگر فایل نیاز به اتصال به کد خارجی یا فایل غیر AZR داشته باشد، ابتدا باید آن فایل به فرمت AZR تبدیل (کامپایل) شود. بنابراین، فایلهای آزرا تنها با فایلهای همان نوع ارتباط برقرار میکنند.
پیش از شروع بدنه اصلی کد، برخی ابردادهها باید تعریف شوند. این موارد شامل: سیستم فراخوانیشده، نوع فایل (پیشفرض: azr)، شناسه سیستم برای مجوز اجرا، و نماد -- برای مشخص کردن آغاز بخش اصلی کد است.
در ابتدای هر فایل، دستور Imvoke باید ظاهر شود. این دستور مسئول فراخوانی سیستم اجرا، تعیین نسخه سیستم، تعیین سطح دسترسی و مشخص کردن اینکه کدام محیط مجاز به اجرای فایل است، میباشد.
مثال: Imvoke(:"system/64/user.001.alpha")
این خط به سیستم اطلاع میدهد که کدام محیط باید فایل را اجرا کند، چه نسخهای مورد نیاز است و چه سطح دسترسی مجاز است. اگر سیستمی غیر از سیستم مشخصشده بخواهد فایل را اجرا کند، اجرا رد خواهد شد. بدون دستور Imvoke، فایل مجاز به اجرا نیست و رد میشود.
دستور World-type محیط اجرا و پیکربندی «جهان» را تعریف میکند.
مثال: World-type(:Azra | [ip = 1234])
این خط مشخص میکند که کد در جهان Azra با پارامترهای محیطی تعریفشده (مثلاً آدرس IP یا شناسه شبکه) اجرا میشود.
در آزرا، نام متغیرها هرگز نباید حاوی فاصله باشند. مثال غلط: -0amir reza = 2- — این منجر به خطای نحوی میشود زیرا بین amir و reza فاصله وجود دارد.
برای جدا کردن کلمات درون نام متغیر، باید از کاراکتر زیرخط _ استفاده شود. نسخه صحیح: -0amir_reza = 2-. این نسخه هم معتبر است: -0amir-reza = 2-.
نکته: در World-type، قانون زیرخط اعمال نمیشود زیرا World-type یک دستور اصلی سیستمی است و تابع دستور زبان استاندارد متغیرهای آزرا نیست.
در انتهای فایل، دستورات مشخصی باید اضافه شوند تا به سیستم اجرا اطلاع دهند چه دادههایی باید پردازش شوند و چه دادههایی نادیده گرفته شوند. این بخش معمولاً شامل دو دستور پایانی است: Delog{ … } و Submit.
فرمت کلی: Delog{int, str, …}
این دستور مشخص میکند کدام نوع دادهها از متغیرهای فایل باید در زمان کامپایل شناسایی شوند. این دستور تعیین میکند کامپایلر کدام نوع متغیرها (int، str، bool، ref و غیره) را پردازش کند، به کامپایلر دستور میدهد متغیرهای انواع دیگر را نادیده بگیرد، و تضمین میکند تنها انواعی که داخل {} فهرست شدهاند در پردازش نهایی لحاظ شوند.
اگر Delog{...} وجود نداشته باشد، تمام متغیرهای فایل معتبر و ضروری در نظر گرفته میشوند. کامپایلر باید همه متغیرها را پردازش کند.
مثال: Delog{int, str} — یعنی تنها متغیرهای عددی و رشتهای مرتبط هستند. انواع دیگر (مثل bool یا ref) نادیده گرفته میشوند.
فرمت کلی: Submit(:<filename>)
مثال: Submit(:1.azr)
این دستور باید در انتهای فایل ظاهر شود. این دستور بهطور رسمی پایان کد را مشخص میکند، اجرای موفق را تأیید میکند و نام فایل را برای گزارشدهی و پیگیری وابستگیها ثبت میکند. هیچ دستور قابلاجرایی نمیتواند بعد از Submit بیاید.
در یک فایل استاندارد آزرا، پایان معمولاً به این شکل است:
Delog{int, str, ref}
Submit(:123.azr)
روند اجرا: ۱. Delog مشخص میکند کدام انواع داده پردازش و کدام نادیده گرفته میشوند. ۲. Submit اجرای فایل را نهایی و بهطور رسمی میبندد.
Delog و Submit مکمل یکدیگرند و بلوک پایانی رسمی یک فایل AZR را تشکیل میدهند. اگر هرکدام از آنها وجود نداشته باشد، سیستم فایل را ناقص یا نامعتبر در نظر میگیرد.
سند رسمی قوانین زبان
قانون DBS (جداکننده بلوک خطتیره) یکی از اصول ساختاری اصلی زبان برنامهنویسی آزرا است. هدف اصلی آن اعمال نظم، افزایش خوانایی و امکان بررسی ساختاری بلوکهای کد در زمان کامپایل است. استفاده صحیح از DBS به کامپایلر امکان میدهد دقیقاً تشخیص دهد هر بلوک کد از کجا شروع و کجا تمام میشود.
پس از هر بلوک چندخطی، باید یک خط جداکننده متشکل از فقط کاراکترهای خطتیره (-) وجود داشته باشد. تعداد خطتیرهها در آن خط باید دقیقاً برابر با تعداد خطوط بلوک قبلی باشد. این خط بهعنوان «امضای بلوک» عمل میکند و یکپارچگی ساختاری و کامل بودن آن بخش از کد را تأیید میکند.
بلوک به مجموعهای از خطوط متوالی گفته میشود که در کنار هم یک واحد منطقی واحد را در برنامه تشکیل میدهند. نمونههای رایج بلوک در آزرا عبارتند از: چند تعریف متغیر پشت سر هم، چند دستور Extract که در کنار هم گروهبندی شدهاند، مجموعهای از عملیات مرتبط، یا هر بخشی از کد که برنامهنویس آن را یک واحد منسجم در نظر میگیرد. پس از هر بلوک، درج یک خط DBS الزامی است. حذف خط DBS منجر به خطای کامپایل میشود.
مثال ۱: بلوک دو خطی
-0x = Hello World-
Extract(:Hello World)
--
چون بلوک شامل ۲ خط است، خط جداکننده شامل ۲ خطتیره (--) است.
مثال ۲: بلوک سه خطی
-1y = 1Hello World-
-2z = Hello 1 World-
-3b = Hello World3-
---
بلوک شامل ۳ خط است، بنابراین جداکننده از ۳ خطتیره (---) تشکیل شده است.
DBS صرفاً یک جداکننده بصری نیست—بلکه چند نقش ساختاری حیاتی در زبان آزرا ایفا میکند:
کامپایلر موظف است خطاهای مرتبط با DBS زیر را تشخیص داده و گزارش دهد:
-) است.قانون جداکننده بلوک خطتیره (DBS) موارد زیر را تضمین میکند: پایداری ساختاری کد آزرا، تشخیص خودکار خطاهای ویرایش یا کپی، و تأیید کامل بودن بلوک در زمان کامپایل. با الزام DBS در پایان هر بلوک چندخطی، آزرا اعتبارسنجی ساختاری قطعی و یکپارچگی دقیق کامپایل را حفظ میکند.
تعریف رسمی ساختاری و رفتاری
یک کلاس (Class) در آزرا برای تعریف یک نوع داده سفارشی استفاده میشود. یک کلاس شامل: نام کلاس، فهرستی از ویژگیها، و بدنههای متد اختیاری است.
ساختار کلی:
Class(:ClassName | [prop1:type , prop2:type , …])
پرانتز اول نام کلاس را نگه میدارد. بلوک براکت شامل فهرست ویژگیها است. پس از تعریف یک کلاس، باید یک خط DBS با دقیقاً ۱ خطتیره قرار گیرد، زیرا تعریف کلاس یک خط ساختاری واحد در نظر گرفته میشود.
مثال:
Class(:Person | [name:str , age:int])
-
این ساختار یک کلاس Person با دو ویژگی میسازد: name و age.
متد (Method) تابعی است که به یک کلاس مرتبط است و رفتار یک شیء را توصیف میکند.
ساختار کلی:
Method(:methodName) ->returnType
-[variable definitions and operations]-
turn(:value)
قوانین: یک متد همیشه باید با کلیدواژه Method شروع شود. returnType نوع خروجی متد را تعیین میکند. متغیرهای داخلی باید از قوانین تعریف متغیر آزرا پیروی کنند. خروجی باید با استفاده از turn تولید شود. متد باید با یک خط DBS پایان یابد که تعداد خطتیرههای آن برابر تعداد خطوط داخلی است.
مثال:
Method(:greet) ->str
-0msg = "Hello" + name-
turn(:msg)
--
(۲ خط داخلی ← --)
یک تابع (Func) قطعه کدی مستقل است که خارج از کلاسها قرار دارد و اغلب برای منطق سطحبالا یا جریان اصلی برنامه استفاده میشود.
ساختار کلی:
Func(:functionName)
-[variable definitions and operations]-
turn(optional)
قوانین: یک تابع با Func شروع میشود. میتواند شامل متغیرها، عملیاتها، فراخوانی متد و Extract باشد. خروجی با turn تعریف میشود؛ میتواند خالی باشد. DBS پایانی باید تعداد خطتیره برابر با تعداد خطوط داخلی داشته باشد.
مثال:
Func(:main)
-0p = Person("Amir" , 20)-
-1result = p:greet()-
Extract(:@1)
turn()
----
(۴ خط داخلی ← ----)
متدها با استفاده از عملگر : فراخوانی میشوند. فرم کلی: object:method(). مثال: p:greet() — این دستور متد greet را روی شیء p اجرا میکند.
اشیاء با استفاده از نام کلاس به همراه آرگومانها ساخته میشوند. ساختار کلی: variable = ClassName(arg1 , arg2 , …). مثال: -0p = Person("Amir" , 20)-
دستور turn خروجی یک متد یا تابع را تعیین میکند. فرمها: turn(:value) یا turn() (بدون خروجی).
تمام تعاریف کلاس، متد و تابع باید با یک خط DBS پایان یابند. تعداد خطتیرهها باید دقیقاً با تعداد خطوط منطقی داخلی بلوک مطابقت داشته باشد. این امر اعتبارسنجی ساختاری، تشخیص خطوط گمشده، اضافی یا جابهجاشده، و یکپارچگی بلوک را در زمان کامپایل تضمین میکند.
در آزرا، تصمیمگیری منطقی از طریق یک زنجیره شرطی چهار بخشی متشکل از کلیدواژههای رزروشده زیر انجام میشود: is، reply، shoot، wall(). این ترتیب هرگز نباید تغییر کند. هرگونه تغییر در ترتیب منجر به خطای نحوی میشود.
ساختار شرطی همیشه با is شروع میشود. این کلیدواژه شرط منطقی اصلی را تعریف میکند. اگر شرط درست ارزیابی شود، بلوک آن اجرا میشود. پس از اجرا، کل زنجیره پایان مییابد. اگر نادرست باشد، اجرا به مرحله بعدی (reply) منتقل میشود.
صفر یا چند بخش reply میتواند پس از is بیاید. هر reply شرط مستقل خود را دارد. یک reply تنها در صورتی ارزیابی میشود که تمام شرطهای قبلی نادرست بوده باشند. اگر درست باشد، بلوک آن اجرا شده و زنجیره پایان مییابد. اگر نادرست باشد، reply بعدی بررسی میشود.
اگر هیچکدام از شرطهای قبلی (is یا هر reply) درست نباشند، اجرا وارد بلوک shoot میشود. shoot بهعنوان مسیر بازگشتی نهایی عمل میکند و همیشه پس از تمام reply ها ظاهر میشود.
زنجیره شرطی باید با wall() پایان یابد. این دستور پایان رسمی بلوک شرطی را مشخص میکند و به کامپایلر اجازه میدهد ساختار را بهدرستی ببندد. اگر wall() وجود نداشته باشد، خطای نحوی رخ میدهد زیرا کامپایلر نمیتواند تشخیص دهد ساختار تصمیمگیری کجا پایان مییابد.
is ← اگر درست ← اجرا ← پایانreply بهترتیب ← اولین reply درست ← اجرا ← پایانshootwall() برای بستن رسمی ساختارپس از پایان زنجیره شرطی (بلافاصله بعد از wall())، یک خط DBS باید ظاهر شود. تعداد خطتیرهها باید با مجموع خطوط منطقی داخل بلوک شرطی مطابقت داشته باشد. عدم تطابق منجر به خطای DBS میشود.
مشخصات ساختار شرطی — زبان آزرا
ساختار شرطی در آزرا شامل چهار جزء است: is، reply، shoot، wall(). این چهار عنصر در کنار هم زنجیره کامل تصمیمگیری منطقی را تشکیل میدهند.
کلیدواژه is اولین عنصر زنجیره شرطی است. شرط اصلی ساختار درون این بخش تعریف میشود. اگر شرط داخل is درست ارزیابی شود، بلوک متناظر آن اجرا میشود. پس از اجرای بلوک is، زنجیره شرطی بلافاصله پایان مییابد.
کلیدواژه reply برای تعریف شرطهای اضافی پس از is استفاده میشود. هر reply تنها زمانی ارزیابی میشود که تمام شرطهای قبلی نادرست بوده باشند. چندین بخش reply در یک زنجیره شرطی واحد مجاز است. بخشهای reply دقیقاً به همان ترتیبی که نوشته شدهاند ارزیابی میشوند. اولین reply که شرطش درست ارزیابی شود، بلوک خود را اجرا میکند و زنجیره در همانجا پایان مییابد.
کلیدواژه shoot مسیر بازگشتی (پیشفرض) زنجیره شرطی را تعریف میکند. shoot تنها زمانی اجرا میشود که هیچکدام از شرطهای is یا هر reply درست نباشند. تعریف shoot اختیاری است. اگر shoot تعریف نشده باشد و هیچ شرطی درست ارزیابی نشود، زنجیره بدون اجرای هیچ بلوکی پایان مییابد. shoot دو فرم نحوی دارد: فرم کامل shoot() -> و فرم کوتاه shoot ->.
کلیدواژه wall() پایان رسمی زنجیره شرطی را مشخص میکند. حضور wall() در انتهای ساختار شرطی الزامی است. حذف wall() منجر به خطای نحوی میشود.
is ← reply (صفر یا چند بار) ← shoot (اختیاری) ← wall()
ترتیب تعریفشده باید دقیقاً رعایت شود. هرگونه تغییر ترتیب، تکرار نامعتبر یا جایگذاری نادرست عناصر منجر به خطای نحوی میشود. تنها اولین شاخهای که شرط آن درست ارزیابی شود اجرا میگردد. تمام شاخههای بعدی نادیده گرفته میشوند.
— پایان مشخصات نحو رمزی آزرا (AZRA Cipher Syntax) —
برای دانلود فایل PDF اینجا کلیک کنید