====== نحو (Syntax) ====== ===== تعریف ===== **نحو (Syntax)** مجموعه قواعدی است که مشخص می‌کند اجزای یک زبان برنامه‌نویسی چگونه باید کنار یکدیگر قرار بگیرند تا یک عبارت یا برنامه از نظر ساختاری معتبر باشد. این قواعد می‌توانند ترتیب کلمات، نحوه استفاده از عملگرها، ساختار بلوک‌های کد، پرانتزها، نشانه‌گذاری‌ها و شکل تعریف متغیرها و توابع را مشخص کنند. اگر کدی قواعد نحوی زبان را رعایت نکند، ممکن است هنگام تحلیل کد با خطای نحوی (Syntax Error) مواجه شود. ===== مثال ===== کد زیر در پایتون معتبر است: if temperature > 30: print("It's hot") در این مثال، دستور `if` باید با یک عبارت شرطی و `:` همراه باشد. همچنین بدنه شرط با تورفتگی (Indentation) مشخص می‌شود. نمونه نامعتبر: if temperature > 30 print("It's hot") در این کد، پس از عبارت شرطی `:` قرار نگرفته است. در نتیجه، مفسر پایتون هنگام تحلیل کد خطای نحوی گزارش می‌کند. ===== نحو چگونه تعریف می‌شود؟ ===== نحو زبان‌های برنامه‌نویسی معمولاً با استفاده از قواعد صوری توصیف می‌شود. این قواعد مشخص می‌کنند چه ترکیب‌هایی از نمادها و ساختارها در زبان مجاز هستند. برای نمونه، یک زبان ممکن است تعریف متغیر را به شکل زیر مجاز بداند: identifier = expression این نمایش صرفاً یک الگوی ساده و عمومی است، نه دستور واقعی یک زبان مشخص. در این الگو، `identifier` نام متغیر و `expression` مقداری است که به آن نسبت داده می‌شود. در طراحی زبان‌های برنامه‌نویسی، گرامرهای صوری مانند گرامر مستقل از متن (Context-Free Grammar) برای توصیف بسیاری از ساختارهای نحوی استفاده می‌شوند. ابزارهای تحلیل‌گر نحوی (Parser) نیز می‌توانند با استفاده از این قواعد، ساختار کد را بررسی کنند. ===== خطای نحوی (Syntax Error) ===== خطای نحوی زمانی رخ می‌دهد که کد با قواعد ساختاری زبان سازگار نباشد. نمونه‌هایی از خطاهای نحوی عبارت‌اند از: * فراموش کردن پرانتز یا علامت نقل‌قول. * استفاده نادرست از کلمات کلیدی. * قرار دادن عملگرها در جای نامعتبر. * رعایت نکردن ساختار بلوک‌های کد. * استفاده از نشانه‌گذاری نادرست، مانند فراموش کردن `:` در دستور شرطی پایتون. محل تشخیص خطا به زبان و ابزار مورد استفاده بستگی دارد. بعضی خطاها هنگام تحلیل کد شناسایی می‌شوند و برخی دیگر تنها در شرایط خاص آشکار می‌شوند. ===== تفاوت نحو و معناشناسی ===== **نحو (Syntax)** مشخص می‌کند کد از نظر ساختاری چگونه باید نوشته شود؛ **معناشناسی (Semantics)** به معنای ساختارهای معتبر و رفتار آن‌ها می‌پردازد. برای مثال: x = "hello" - 5 این دستور از نظر ساختار نحوی در پایتون معتبر است، اما اجرای آن در شرایط معمول با خطای `TypeError` مواجه می‌شود؛ زیرا پایتون نمی‌تواند رشته `"hello"` را مستقیماً از عدد `5` کم کند. بنابراین، هر کدی که از نظر نحوی معتبر باشد، الزاماً رفتار معنادار یا قابل‌اجرایی ندارد. اطلاعات بیشتر: [[glossary:programming:semantics|معناشناسی (Semantics)]] ===== نحو در زبان‌های مختلف ===== قواعد نحوی در زبان‌های برنامه‌نویسی متفاوت‌اند. یک ساختار ممکن است در یک زبان معتبر و در زبان دیگری نامعتبر باشد. برای نمونه، تعریف یک متغیر عددی در C: int count = 10; و تعریف متغیر در پایتون: count = 10 هر دو نمونه یک مقدار را به نام `count` نسبت می‌دهند، اما قواعد نحوی آن‌ها متفاوت است. در C، نوع متغیر در این تعریف به‌صورت صریح مشخص شده است؛ در پایتون، نوع مقدار در زمان اجرا تعیین می‌شود و این تفاوت تنها نحوی نیست، بلکه به مدل نوع‌دهی زبان‌ها نیز مربوط است. ===== چرا نحو اهمیت دارد؟ ===== شناخت نحو برای خواندن، نوشتن و اشکال‌زدایی کد ضروری است. درک قواعد نحوی کمک می‌کند تا: * خطاهای ساختاری سریع‌تر شناسایی شوند. * کد مطابق قواعد زبان نوشته شود. * کد دیگران راحت‌تر خوانده و تحلیل شود. * ابزارهایی مانند ویرایشگرها، تحلیل‌گرها و کامپایلرها بهتر درک شوند. * تفاوت‌های ساختاری زبان‌های برنامه‌نویسی مشخص شوند. ===== اصطلاحات مرتبط ===== * [[glossary:programming:semantics|معناشناسی (Semantics)]] * [[glossary:programming:source_code|کد منبع (Source Code)]] * [[glossary:programming:compiler|کامپایلر (Compiler)]] * [[glossary:programming:interpreter|مفسر (Interpreter)]] * [[glossary:programming:debugging|اشکال‌زدایی (Debugging)]] * [[glossary:programming:algorithm|الگوریتم (Algorithm)]] ===== منابع ===== * [[https://docs.python.org/3/reference/grammar.html|مستندات رسمی پایتون: گرامر زبان]] * [[https://docs.python.org/3/reference/lexical_analysis.html|مستندات رسمی پایتون: تحلیل واژگانی]] * [[https://gcc.gnu.org/onlinedocs/gcc/|مستندات رسمی GCC]]