العبارات
القواعد النحوية
program = { statement } ;
statement = assignment | exprStmt | block | ifStmt | forStmt | ";" ;
assignment = identifier "=" expression ";" ;
exprStmt = expression ";" ; (* result discarded, e.g. a builtin call *)
block = "{" { statement } "}" ;
ifStmt = "if" "(" expression ")" statement [ "else" statement ] ;
forStmt = "for" "(" identifier "=" expression ";"
expression ";"
identifier "=" expression ")" statement ;
expression = see the precedence table under Operators ;
call = identifier "(" [ expression { "," expression } ] ")" ;
الإسناد
name = expression; عبارة، وليست تعبيرًا. لذا فإن a = b = 1; وif (x = 5) وf(x = 1) كلها أخطاء.
لا يوجد إسناد مركب (+=) ولا ++/--. اكتب i = i + 1;.
عبارات التعبير
أي تعبير يليه ; هو عبارة، وتُهمَل قيمته. هكذا تُستدعى الدالة المضمَّنة من أجل أثرها:
WindowMinimize(w);. تُتجاهل قيمة Bool التي تُرجعها معظم الدوال المضمَّنة ما لم تلتقطها:
ok = FileDelete(p);.
if / else
الأقواس حول الشرط مطلوبة. الفرع عبارة واحدة أو كتلة { }. إن else if مجرد else عبارتها if أخرى، لذا
تعمل السلاسل. تنتمي else المعلّقة إلى أقرب if. استخدم الأقواس المعقوصة عندما يكون ذلك ملتبسًا.
n = MathRandom(1, 100);
if (n < 10) {
size = "small";
} else if (n < 50) {
size = "medium";
} else {
size = "large";
}
if (n == 42) UtilityPrint("the answer"); // فرع من عبارة واحدة، بلا أقواس معقوصة
for
for (init; condition; step) body. الأجزاء الثلاثة كلها مطلوبة. يجب أن يكون كل من init وstep إسنادًا
واحدًا بالشكل name = expression، بلا قوائم مفصولة بفواصل وبلا استدعاءات مجردة. يمكن أن يكون
condition أي تعبير، ويُفحص قبل كل دورة، بما فيها الأولى. يُنفَّذ step بعد كل دورة.
for (i = 10; i > 0; i = i - 2) {
UtilityPrint(StringFormat("{0}", i, "")); // 10 8 6 4 2
}
إنها الحلقة الوحيدة. لا يوجد while ولا do ولا break ولا continue ولا for x in …. البدائل المعتادة
موجودة في أنماط التحكم في التدفق.
الكتل
تجمع { ... } العبارات في أي موضع يُتوقع فيه عبارة واحدة، بما في ذلك المستوى الأعلى. ولا تفتح نطاقًا
جديدًا للمتغيرات.