genix
پیوند
برای نمایش کلیک کنید
برای نمایش کلیک کنید
سینتکس و سمنتیک چیه؟ (Syntax and Semantics) ☠
برخلاف زبانهای طبیعی که افکار و احساسات خودمون رو با اون ها نشون میدیم، زبانهای برنامهنویسی رو میشه بهعنوان زبانهای مصنوعی در نظر گرفت که توسط انسان ها برای برقراری ارتباط با رایانهها، و سپس مهمتر از همه برای برقراری ارتباط الگوریتمها بین مردم تعریف میشن.
به عنوان مثال، تعاریف زبان از سه جزء تشکیل شده:
🫧 Syntax: سینتکس یک زبان برنامه نویسی مجموعه قوانینی هست که ترکیبی از نمادها رو تعریف میکنه که به عنوان برنامه هایی با ساختار صحیح، در اون زبان در نظر گرفته میشن. سینتکس یک زبان شکل سطحی اون رو مشخص میکنه. زبان های برنامه نویسی مبتنی بر متن بر اساس دنباله ای از کاراکترها هستن. گرامر واژگانی یک زبان متنی مشخص میکنه که چگونه کاراکترها باید به توکن ها تقسیم بشن. همچنین روابط رسمی بین اجزای تشکیل دهنده یک زبان رو تعریف میکنه و بدین وسیله توصیفی ساختاری از عبارات مختلفی که استرینگ های قانونی در زبان رو تشکیل میدن ارائه میده. و در نهایت سینتکس صرفاً به شکل و ساختار نمادها(سیمبل ها) در یک زبان می پردازه بدون اینکه به معنای اون ها توجه بشه.
🫧 Semantics: به معنای معتبر بودن یا نبودن جمله هست. سمنتیک معنای رشته های معتبر سینتکس رو در یک زبان آشکار میکنه. برای زبان های طبیعی، این به معنای همبستگی جملات و عبارات با اشیاء، افکار و احساسات تجربیات ماست. برای زبانهای برنامهنویسی، سمنتیک رفتاری رو توصیف میکنه که کامپیوتر هنگام اجرای یک برنامه در زبان از اون پیروی میکنه. ما ممکنه این رفتار رو با توصیف رابطه بین ورودی و خروجی یک برنامه یا با توضیح گام به گام سینتکس اجرای یک برنامه بر روی یک ماشین واقعی یا انتزاعی فاش کنیم. سمنتیک اصطلاح کلی برای مطالعه معناست. در علوم کامپیوتر موضوع سمنتیک زبان برنامه نویسی به دنبال این است که معنای ریاضی دقیقی به برنامه ها بده.
سمنتیک به 2 سطح تقسیم میشه. سطح پایین و سطح بالا. که توضیحات هرکدوم متفاوت هست. که خودتون میتونین تحقیق کنید.
🫧 Pragmatics: پراگماتیک به جنبه هایی از زبان اشاره میکنه که کاربران زبان رو درگیر میکنه، یعنی پدیده های روانشناختی و جامعه شناختی مانند سودمندی، دامنه کاربرد و تأثیرات بر استفاده کنندگان. برای زبان های برنامه نویسی، عمل شناسی شامل موضوعاتی مانند سهولت اجرا، کارایی در کاربرد و روش برنامه نویسی هست.
اما تجزیه تحلیل سمنتیک و سینتکس در کامپایلر کجا قرار میگیره؟
معمولاً، تجزیه و تحلیل سینتکس و سمنتیک کد در قسمت "frontend" کامپایلر انجام میشه.
Syntax: کامپایلر توکن هایی رو برای هر کلمه کلیدی و نماد تولید میکنه: توکن ها حاوی اطلاعات نوع کلمه کلیدی و مکان اون در کد هست. با استفاده از این نشانه ها، یک AST (مخفف Abstract Syntax Tree) ایجاد و تجزیه و تحلیل میشن. چیزی که کامپایلر در اینجا بررسی میکنه این هست که آیا کد از نظر لغوی معنیدار است، یعنی آیا "توالی کلمات کلیدی" با قوانین زبان مطابقت داره؟(خطاهای سینتکسی(fucking syntax error😩) در این مرحله ایجاد میشه.)
سمنتیک: اکنون، کامپایلر بررسی میکنه که آیا عملیات کد شما منطقی هست یا خیر. به عنوان مثال اگر زبان از Type Inference پشتیبانی میکنه، اگر می خواهید استرینگی ای رو به یک float اختصاص بدین، خطای سمنتیک گزارش میشه. یا دوبار یک متغیر رو اعلام کنین. اینها خطاهایی هستند که از نظر دستوری و سینتکسی درست هستن، اما در طول عملیات هیچ معنایی ندارن. نکته جانبی: برای بررسی اینکه آیا یک متغیر دو بار اعلام شده است یا خیر، کامپایلر یک symbol table رو مدیریت میکنه.
شاید درکش در نگاه اول سخت باشه و ممکنه توضیحات من گیجتون کنه، ولی سعی کردم توضیحات ساده و کلی درموردشون بدم. برای اطلاعات بیشتر این PDF و مقالات زیر رو بخونید.
- PDF
- Article
- PDF
21 · 1.7K ·