خطای نحوی چیست؟
چرا خطای نحوی رخ میدهد و چگونه آن را تشخیص دهیم؟
زبان برنامهنویسی مانند زبان فارسی، قواعد و دستورهای خاص خود را دارد. این قواعد را نحو مینامند. هر زبان برنامهنویسی قوانین مشخصی برای نوشتن دستورها، نامگذاری متغیرها، استفاده از پرانتزها، ویرگولها و نقطهویرگولها دارد. اگر برنامهنویس یکی از این قوانین را نقض کند، خطای نحوی رخ میدهد. برای مثال، در بسیاری از زبانها، بعد از هر دستور باید نقطهویرگول (;) نوشته شود. فراموش کردن آن، یا اشتباه در نوشتن نام دستورها، یا استفادهٔ نادرست از پرانتزها، همه نمونههایی از خطای نحوی هستند. کامپیوترها مانند یک معلم سختگیر، وقتی با این اشتباهات روبرو شوند، اجرای برنامه را متوقف کرده و پیام خطا نشان میدهند.
یکی از روشهای ساده برای تشخیص این خطاها، توجه به پیام خطایی است که محیط برنامهنویسی نشان میدهد. معمولاً این پیامها شمارهٔ خطی که اشتباه در آن رخ داده و همچنین نوع خطا را مشخص میکنند. برنامهنویسان حرفهای همیشه اولین خطایی که برنامه نشان میدهد را بررسی میکنند، چون گاهی یک اشتباه کوچک میتواند باعث ایجاد زنجیرهای از خطاهای دیگر شود. رفع خطاهای نحوی، مانند تصحیح املایی یک متن است؛ باید تکتک دستورها را بررسی کرد و آنها را با قوانین زبان مطابقت داد.
نمونههای عینی و پیامدهای خطای نحوی
برای درک بهتر این نوع خطا، بیایید چند مثال ساده و ملموس را بررسی کنیم. فرض کنید میخواهیم به کامپیوتر بگوییم که عدد ۵ را در یک حافظه با نام «عدد» ذخیره کند. اگر دستور را بهصورت عدد = 5 بنویسیم، درست است. اما اگر بهجای علامت مساوی (=) از علامت منفی (-) استفاده کنیم، خطای نحوی رخ میدهد. یا مثلاً اگر بنویسیم عدد 5 =، این دستور هم از نظر نحوی غلط است، چون ترتیب اجزای دستور رعایت نشده است. این اشتباهات برای کامپیوتر مانند این است که به یک نفر بگویید «کتاب بخوان خوب» بهجای «کتاب خوب بخوان»؛ او ممکن است متوجه منظورتان نشود.
پیامد این خطاها بسیار ساده است: برنامه اجرا نمیشود. محیط برنامهنویسی یک پیام خطا نشان میدهد و از شما میخواهد که اشکال را برطرف کنید. این یعنی شما نمیتوانید نتیجهٔ کار برنامه را ببینید تا زمانی که همهٔ خطاهای نحوی را اصلاح کنید. این موضوع ممکن است کمی ناامیدکننده باشد، اما در حقیقت یک ویژگی مثبت است؛ چون جلوی اجرای برنامهای که اشتباه دارد گرفته میشود و از بروز خطاهای بزرگتر در آینده جلوگیری میکند.
| دستور درست | دستور نادرست (خطای نحوی) | دلیل خطا |
|---|---|---|
سن = 12
|
سن 12 =
|
ترتیب اجزای دستور رعایت نشده است. |
نشاندادن(سلام)
|
نشاندادن سلام
|
پرانتزهای دور ورودی فراموش شدهاند. |
اگر (x > 5) { ... }
|
اگر x > 5 { ... }
|
پرانتز دور شرط فراموش شده است. |
پرسشهای چالشی و اشتباهات رایج
پاسخ: کامپیوترها برخلاف انسان، هوش و درک زبانی ندارند. آنها فقط دستورالعملهای دقیق و بینقص را متوجه میشوند. کامپیوتر مانند یک ماشین حساب فوقالعاده دقیق است که اگر شما بهجای علامت جمع، علامت تفریق را بزنید، نمیتواند حدس بزند که شما واقعاً جمع میخواستید. به همین دلیل، برنامهنویسی نیاز به دقت زیادی دارد و کامپیوتر فقط در صورتی دستور را اجرا میکند که از نظر نحوی کاملاً صحیح باشد.
پاسخ: خیر، این دو خطا کاملاً متفاوت هستند. خطای نحوی باعث میشود برنامه اصلاً اجرا نشود، چون کامپیوتر دستور را متوجه نمیشود. اما خطای منطقی زمانی رخ میدهد که برنامه اجرا میشود، اما نتیجهٔ آن با آنچه انتظار داریم، فرق دارد. برای مثال، اگر بهجای جمع دو عدد، آنها را تفریق کنید، برنامه اجرا میشود اما جواب اشتباه است. خطای منطقی را پیدا کردن سختتر است، چون برنامهنویس باید رفتار برنامه را بررسی کند تا بفهمد کجا اشتباه فکری کرده است.
پاسخ: خیر، این اتفاق نمیافتد. محیط برنامهنویسی و مترجم (برنامهای که کد را به زبان ماشین تبدیل میکند) همیشه وجود خطاهای نحوی را شناسایی کرده و پیام خطا نشان میدهند. در واقع، وظیفهٔ اصلی مترجم همین است که کد شما را بررسی کند و اگر اشتباه نحوی وجود داشت، به شما اطلاع دهد. اگر پیام خطایی نشان داده نشود، یعنی برنامه از نظر نحوی سالم است و میتواند اجرا شود.