نحو (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) مشخص میکند کد از نظر ساختاری چگونه باید نوشته شود؛ معناشناسی (Semantics) به معنای ساختارهای معتبر و رفتار آنها میپردازد.
برای مثال:
x = "hello" - 5
این دستور از نظر ساختار نحوی در پایتون معتبر است، اما اجرای آن در شرایط معمول با خطای `TypeError` مواجه میشود؛ زیرا پایتون نمیتواند رشته `«hello»` را مستقیماً از عدد `5` کم کند.
بنابراین، هر کدی که از نظر نحوی معتبر باشد، الزاماً رفتار معنادار یا قابلاجرایی ندارد.
اطلاعات بیشتر: معناشناسی (Semantics)
قواعد نحوی در زبانهای برنامهنویسی متفاوتاند. یک ساختار ممکن است در یک زبان معتبر و در زبان دیگری نامعتبر باشد.
برای نمونه، تعریف یک متغیر عددی در C:
int count = 10;
و تعریف متغیر در پایتون:
count = 10
هر دو نمونه یک مقدار را به نام `count` نسبت میدهند، اما قواعد نحوی آنها متفاوت است. در C، نوع متغیر در این تعریف بهصورت صریح مشخص شده است؛ در پایتون، نوع مقدار در زمان اجرا تعیین میشود و این تفاوت تنها نحوی نیست، بلکه به مدل نوعدهی زبانها نیز مربوط است.
شناخت نحو برای خواندن، نوشتن و اشکالزدایی کد ضروری است. درک قواعد نحوی کمک میکند تا: