هاي لغة البرمجة: بدأ التصميم

لقد بدأنا في تصميم لغة البرمجة Hi . إليك مقدمة وبعض الإجابات على الأسئلة حول سبب حاجتك إليها. ومع ذلك ، وبدون سبب وجيه ، يعد تصميم اللغة مهمة مثيرة للاهتمام بشكل غير عادي إذا كنت تأخذها على محمل الجد.



بعد أطروحتنا الخاصة بإمكانية الوصول القصوى للتعلم ، سنحاول دمج جميع العناصر الأساسية للغة منطقيًا من العناصر المستخدمة على نطاق واسع للغات الخوارزمية الأخرى. نتبع هنا المنطق الداخلي الوارد في المقالة الأولى والافتراض القائل بأن تكوين الكيانات للعديد من اللغات الشائعة سيجعل من السهل استيعاب محتوى جديد بجهد أقل ، نظرًا لأن الناس لديهم آلة دمج مدمجة تعتمد على الشبكات العصبية التي تقدم تلقائيًا انتهاكات جزئية للدلالات. soobscheni.



فكرة إنشاء لغات جديدة من عناصر معروفة لها تاريخ طويل. منذ أكثر من 140 عامًا ، ابتكر الدكتور زامنهوف لغة الإسبرانتو الاصطناعية من الأجزاء المكونة للغات طبيعية أخرى. اتضح أن اللغة منطقية وسهلة التعلم لدرجة أنها اتضح أنها قابلة للتطبيق واستمرت حتى يومنا هذا. على سبيل المثال ، يتوفر في مترجم جوجل. سالوتون هبر! Bonvenon sub la kat!



دعونا في محاولة لتصميم اللغة التي هي مريحة للبرمجة سريعة من الألعاب الفكرية والألغاز، وسوف استعمالها إرضاء مع المنطق والتفكير.



تعليقات



للحصول على تعليق من سطر واحد ، استخدم الرمز # (Python ، R ، Ruby). يمكن استخدام التركيبة // (C والعديد من اللغات الأخرى) كعامل تقسيم صحيح للحصول على نتيجة العملية كرقم حقيقي ، حتى لا تستخدم في هذه الحالة تعبير تحويل مرهق بعض الشيء مثل CGFloat (int) ، كما في Swift.



PRINT “Hi world\n”
#  Hi world     


لإبراز التعليقات متعددة الأسطر ، استخدم مجموعة ## .

##   .
,      Python ##


يعد اختيار الرمز # مناسبًا أيضًا لأنه سيتم استخدامه في المستقبل بواسطة مترجم اللغة Hi لمعالجة العلامات الوصفية في نص البرنامج ، والتي يمكن توليفها من نص التعليق. هذا يشبه إلى حد ما المعالج المسبق في C / C ++ ، والذي ، بالمناسبة ، يستخدم أيضًا الرمز #.



أنواع البيانات الأولية



تستخدم لغة Hi في الإصدار الأساسي ثلاثة أنواع من البيانات الأولية:



ثنائي: BOOL

العمليات الممكنة: & (و) ، | (أو) ، ~ (لا)

LET true = TRUE 
LET false = FALSE
PRINT true & true   #  TRUE
PRINT true | false   #  TRUE
PRINT ~true   #  FALSE


الأعداد الصحيحة: INT

العمليات الممكنة: + ، - ، * ، / (تقسيم عدد صحيح) ، ٪ (باقي) ، // (تقسيم مع تحويل تلقائي للنتيجة إلى النوع الحقيقي)

VAR i = 0
PRINT (i + 6 – 2) * 3 / 5   #  2


الأرقام الحقيقية :

العمليات الحقيقية الممكنة: + ، - ، * ، /

VAR pi = 3.1415926535


سلاسل



السلاسل هي نوع مركب لأنه يتم التعامل معها كسلسلة من أحرف Unicode

LET the_force = “flow through you”


لا نستخدم علامات اقتباس مفردة للسلسلة الحرفية ، نظرًا لأن الأحرف ، خاصة تلك الموجودة على لوحة المفاتيح القياسية ، تعد موردًا قيمًا للمستقبل.

عمليات السلسلة القياسية:

# 
VAR language = “C”
LET statement  = “ – the best language ever”
LET proposition = language + statement
language = “Python”


في الوقت الحالي ، لا نحتاج إلى تقديم نوع بيانات من النوع Character ؛ لحل المشاكل العملية ، يمكنك استخدام ...

#    
LET secondSym = language[2]


تكون نتيجة التخصيص في الحالة التي يكون فيها مرجع الفهرس خارج السلسلة "" ولا يؤدي إلى خطأ وقت التشغيل.



الثوابت والمتغيرات



كما رأينا في الأمثلة أعلاه ، فإن Hi هي لغة مكتوبة بشكل ثابت لتقليل احتمالية حدوث أخطاء في استخدام المعرفات وفهم أفضل للغرض منها. يجب التصريح عن الثوابت ( LET ) والمتغيرات ( VAR ) قبل الاستخدام الأول للكائن. من المريح إعلان الأنواع دون تحديد نوع معين بشكل صريح عن طريق تعيين القيم الأولية ؛ في هذه الحالة ، يصبح الاستدلال النوعي واضحًا.

##  
LET one: INT = 1  : ##
LET one = 1
VAR boolean = TRUE


يتم استعارة مفهوم إعلان الثوابت والمتغيرات let و var من Swift ، ولكن في Hi ، من الممكن عمل تصريحات متعددة بإسناد قيمة واحدة:

VAR i, j, k = 0


المدخلات والمخرجات القياسية



يتم إدخال البيانات من لوحة المفاتيح بواسطة الأمر INPUT :

VAR startFrom: INT
PRINT "Start from: "; INPUT startFrom


لا تحتاج إلى كتابة صواب أو خطأ لإدخال قيمة BOOL. يعد تطبيق الهاتف المحمول للبرمجة ، الذي نستعد لإصداره في AppStore ، ذكيًا بما يكفي لعرض زرين فقط مع خيار ثنائي في هذه الحالة. وبالمثل ، سيتم عرض لوحة مفاتيح رقمية بدون فترة لإدخال عدد صحيح ولوحة مفاتيح عادية لإدخال قيمة نصية.



يقوم الأمر PRINT بطباعة الأسطر إلى شاشة نوع عرض وحدة التحكم. الافتراضي هو 20 سطرًا من 40 حرفًا. يمكنك تحديد الوضع بأحرف كبيرة 10 × 20 أو صغير: 40 × 80.

PRINT "     Hi language"


مرحبا لغة الآلة الحاسبة



الآن لدينا كل شيء لتكوين قواعد نحوية لآلة حاسبة مع مدخلات ومخرجات تفاعلية في شكل EBNF من حيث لغة Hi.

1. The Syntax of HI Programming Language

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
capital = "A" | ... | "Z".
small = "a" | ... | "z".
character = [Unicode_character].
addOperator = "+" | "-" | "|".
mulOperator = "*" | "/" | "//" | "%" | "&".
relation = "==" | "~=" | "<" | "<=" | ">" | ">=".

integer = digit {digit}.
real = digit {digit} "." {digit}.
string = """ {character} """.

number = integer | real.
letter = capital | small.

keyword = capital capital {capital}.
ident = letter {letter | digit}.
type = keyword.

factor = number | string | TRUE | FALSE | ident | "(" expression ")" | "~" factor.
term = factor {mulOperator factor}.
simpleExpression = ["-"] term {addOperator term}.
expression = simpleExpression [relation simpleExpression].
assignment = ident "=" expression.

identList = ident {"," ident}.
expList = expression {"," expression}.
constDeclaration = LET identList [":" type] "=" expression.
varDeclaration = VAR identList [":" type] ["=" expression].
funcCall = keyword [expList ].

statement = assignment | funcCall | constDeclaration | varDeclaration 
statementSequence = statement {("\n" | ";") statement}.

2. Standard Data Types

BOOL	INT	REAL	STRING

3. Standard Procedures and Functions

INPUT	PRINT

4. Other Keywords

LET	VAR


على عكس القواعد النحوية للعديد من اللغات ، حيث يتم تضمين الكلمات الرئيسية في قائمة الاستثناءات من فئة أكثر عمومية من المعرفات ، فإننا نقدم نوعًا خاصًا من الرموز المميزة - الكلمات الأساسية ، والتي يتم التعرف عليها بالفعل على مستوى ماسح مترجم اللغة Hi.



في المقالة التالية ، سنقدم أنواع البيانات المركبة في Hi بالإضافة إلى STRING. بالنسبة إلى لغتنا البسيطة ، فهي قوية بما يكفي للتعبير بسهولة عن فكرة العمل على مجموعات من الكائنات والمصفوفات والقواميس.



All Articles