فرم سطحی یک زبان برنامهنویسی دستور آن نامیده میشود. غالب زبانهای برنامهنویسی کاملاً متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده میکنند. از طرف دیگر، برنامههایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبلها برای مشخص کردن برنامه استفاده میکنند. دستور یک زبان ترکیبات ممکن سمبلها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص میکند. معنایی که به یک ترکیب سمبلها داده میشود با معناشناسی اداره میشود (قراردادی یا نوشته شده در پیادهسازی منبع). از آنجا که اغلب زبانها متنی هستند، این مقاله دستور متنی را مورد بحث قرار میدهد.
دستور زبان برنامهنویسی معمولاً به وسیلهٔ ترکیب عبارات معین (برای ساختار لغوی) و فرم توضیح اعمال (برای ساختار گرامری) تعریف میشوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list
atom ::= number | symbol
number ::= [+-]?['۰'-'۹']+
symbol ::= ['A'-'Za'-'z']. *
list ::= '(' expression* ')'
این گرامر موارد ذیل را مشخص میکند:
یک عبارت یا atom است یا یک لیست
یک atom یا یک عدد است یا یک سمبل
یک عدد دنباله ناشکستهای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت یا منفی میتواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) میآید.
یک لیست تعدادی پرانتز است که میتواند صفر یا چند عبارت در خود داشته باشد.
"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثالهایی هستند از دنبالههای خوش فرم در این گرامر.
همه برنامههایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامههای درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیادهسازی) به خطای ترجمه یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامههایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقاً مطلوب نویسنده آن نبوده باشد.
به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد یا ممکن است جمله نادرست باشد:
«ایدههای بی رنگ سبز با خشم میخوابند.» از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
«جان یک مجرد متأهل است.» از نظر دستوری درست است، ولی معنایی را بیان میکند که نمیتواند درست باشد.
این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام میدهد که از نظر معنایی تعریف نشدهاست (چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد) complex *p = NULL;
complex abs_p = sqrt (p->real * p->real + p->im * p->im);
گرامر مورد نیاز برای مشخص کردن یک زبان برنامهنویسی میتواند با جایگاهش در «سلسله مراتب چامسکی» طبقهبندی شود. دستور اغلب زبانهای برنامهنویسی میتواند به وسیلهٔ یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.
قرص سیپروهپتادین، عوارض، تاثیر بر چاقی و همه نکات دیگر
افزایش کارایی مغز برای یادگیری زبان خارجی
قرص دوفاستون duphaston ، طرز مصرف اصولی، هشدارها و نکات مهم
روش کنترل خشم