موضوع مقاله: جدول نمادها | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # جدول نمادها | مقدمه: جدول نمادها، در علم کامپیوتر، ساختمان داده‌ای است که برای ذخیره کردن اطلاعات توکن‌ها در همگردانی (کامپایل کردن) بکار می‌رود. | ## بخش 1: جدول نمادها | معمولاً به خاطر اینکه این جدوای و هم توسط بخش‌های ترکیبی کامپایلر مورد استفاده قرار می‌گیرد. زمینه یک جدول نماد ممکن است فقط در زمان فرایند ترجمه در حافظه وجود داشته باشد، یا ممکن است در خروجی ترجمه برای استفاده های بعدی نهفته شده باشد مانند ABI object file. برای مثال این جدول ممکن است در یک جلسه دیباگ تعاملی استفاده شده و یا به عنوان منبعی برای قالب بندی یک گزارش تشخیصی در حین اجرای یک برنامه یا پس از اجرای آن مورد استفاده قرار گیرد. شرح حداقل اطلاعات موجود در یک جدول نماد که توسط یک مترجم استفاده می شود، شامل نام نماد و محل یا آدرس آن است. جدول نماد برای یک کامپایلر با هدف گذاری برای دارا بودن قابلیت جابجایی جدول نماد شامل ویژگی هایی برای برای قابلیت جابجایی خواهد بود. جدول نماد برای زبان های برنامه نویسی سطح بالا ممکن است نوع نماد، محدوده ها، اندازه و ابعاد آن را ذخیره کند. همه این اطلاعات در فایل خروجی نخواهند بود بلکه برای اشکال زدایی احتمالی مهیا شده اند. پیاده سازی ساختمان داده های متعددی برای پیاده سازی جدول نماد مثل:درخت ها، لیست های خطی و فهرست خودسازمان‌دهی‌کننده قابل استفاده است. جدول نمادها به وسیله بخش های زیادی از کامپایلر مورد دسترسی قرار می گیرد، در شروع با تحلیل لغوی و در ادامه در بهینه سازی. یک کامپایلر ممکن است از یک جدول نماد بزرگ برای همه نمادها استفاده کند یا از جداول نماد سلسله مراتبی جداگانه برای دامنه های مختلف استفاده کند. برای نمونه در یک زبان دامنه دار مثل Algol و یا PL/I یک نماد "p" می تواند به صورت مجزا در چندین دامنه و احتمالاً با ویژگی های متفاوت اعلان گردد. | ## بخش 2: جدول نمادها | یک ساختمان داده متداول که برای پیاده سازی جداول نمادها استفاده می شود، جدول درهم سازی است. زمان جستجو در جداول درهم سازی مستقل از تعداد عناصر ذخیره شده در جدول است، بنابراین برای تعداد زیادی از عناصر کارآمد است. استفاده از جدول درهم سازی علاوه بر افزایش سرعت جستجو طبقه بندی حروف الفبا در فرم جدول را ساده تر می کند. برای کامپایلر مفید است که بتواند در صورت لزوم در زمان کامپایل اندازه جدول نماد را به صورت پویا افزایش دهد. اگر در زمان نوشتن کامپایلر، اندازه جدول نماد ثابت باشد، اندازه آن باید به اندازه کافی بزرگ انتخاب شود تا بتواند هر برنامه مبدا ممکن را اداره نماید. از آنجا که تحلیل گر واژگان بخش زیادی از زمان خود را برای جستجو در جدول نمادها مصرف می کند، این فعالیت تأثیر بسزایی در سرعت کلی کامپایلر دارد. جداول درهم سازی معمولاً برای سازماندهی یک جدول نماد استفاده می شود، جایی که کلمه کلیدی یا شناسه برای تولید یک زیرنویس آرایه "هش" می شود. برخوردها در جدول درهم سازی اجتناب ناپذیر است و روش معمول رسیدگی به آنها ذخیره مترادف در فضای آزاد بعدی موجود در جدول است. کاربردها یک جدول نماد بسته به زبان مورد استفاده برای مقاصد زیر استفاده می‌شود: ذخیره‌سازی نام‌های همه گزاره‌ها دریک محل، به شکل ساخت‌یافته تأیید این که متغیری اعلان شده است یا نه پیاده‌سازی بررسی نوع که تأیید می‌کند انتساب و عبارت‌ها در کد منبع از نظر معناشناختی صحیح هستند تعیین دامنه نام (تحلیل دامنه) یک آبجکت فایل شامل یک جدول نماد از شناسه هایی است که از خارج قابل مشاهده است. اگر ماژولی پیدا شود که آن علامت را مشخص کند، همراه با اولین آبجکت فایل با آن پیوند داده می شود و هر شناسه خارجی تعریف نشده ای به لیست شناسه هایی که باید جستجو شوند، اضافه می شود. در حالی که مهندسی معکوس قابل اجرا است، بسیاری از ابزارها برای بررسی آدرس هایی که به متغیرهای سراسری و توابع شناخته شده اختصاص داده شده اند، به جدول نماد مراجعه می کنند. | ## بخش 3: جدول نمادها | اگر جدول نماد قبل از اینکه به یک برنامه اجرایی تبدیل شود، از بین رفته یا پاک شده باشد، تعیین آدرس یا درک هر چیزی از برنامه برای ابزار دشوارتر می شود. عملیات‌ها یک جدول نماد چه خطی و چه هَش باید عملیات‌های زیر را ارائه کرده باشد: Insert این عملیات به‌طور عمده در فاز تحلیلی مورد استفاده قرار می‌گیرد، یعنی نیمه نخست فرایند کامپایل که توکن‌ها شناسایی می‌شوند و نام‌ها در جدول ذخیره می‌شوند. این عملیات برای افزودن اطلاعات در جدول نماد در مورد نام‌های منحصر به فرد که در کد منبع حضور دارند استفاده می‌شود. یک خصوصیت برای یک نماد در کد منبع معادل اطلاعاتی است که در مورد آن نماد وجود دارد. تابع insert نماد و خصوصیت‌های آن را به صورت آرگومان‌هایی می‌گیرد و اطلاعات آن را در جدول نماد ذخیره می‌کند. هنگامی که برای رخدادی از نام، در جدول نماد جستجو می شود، وارده مربوط به اعلان مناسب آن نام باید بر گردانده شود. در نتیجه جدول نماد برای یک رویه یا محدوده معادل رکورد فعالیت در زمان کامپایل است. اطلاعات غیر محلی یک رویه با استفاده از پویش جدول های نماد مربوط به رویه های موجود در حیطه قوانین محدوده زبان یافت می شود. به‌طور مشابه اطلاعات محلی یک رویه می تواند به گروه مربوط به آن رویه در درخت نحو مربوط به آن برنامه الحاق گردد. شماره هر رویه می تواند به صورت نحوگرا با استفاده از قوانین معنایی که ابتدا و انتهای هر رویه را مشخص می نمایند، محاسبه گردد. شماره رویه به عنوان بخشی از تمام اطلاعات محلی آن رویه قرار می گیرد، نمایش نام محلی در جدول نماد زوجی است شامل نام و شماره رویه. | ## جمع‌بندی | هنگامی که برای نام تازه پویش شده به جدول نماد مراجعه می شود، تنها هنگامی که انطباق رخ می دهد که کاراکترهای نام به صورت کاراکتر به کاراکتر با وارده منطبق گردد و شماره همراه آن در وارده جدول نماد با شماره رویه ای که در حال پردازش است برابر باشد.