تحلیل واژگانی: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
FreshmanBot (بحث | مشارکتها) جز اصلاح فاصله مجازی + اصلاح نویسه با ویرایشگر خودکار فارسی |
FreshmanBot (بحث | مشارکتها) جز اصلاح فاصله مجازی + اصلاح نویسه با ویرایشگر خودکار فارسی |
||
خط ۱۰۰:
توکنها براساس قوانین مشخصی از Lexer معرفی(شناسایی) میشوند. برخی از متدهایی که برای شناسایی توکنها به کاربرده میشوند ، شامل : عبارات منظم ، توالی مشخصی از کاراکترها که [[Flag (computing)|flag]] نامیده میشوند ،کاراکترهای جداکنندهٔ خاصی که جداکننده ([[delimiter]]s) نامیده میشوند ، و تعریف صریح به وسیلهٔ یک دیکشنری. کاراکترهای خاص مانند کاراکترهای علامت گذاری، به خاطر استفادهٔ طبیعی آنها در نوشتن و زبانهای برنامهسازی ، معمولاً توسط lexer برای شناسایی توکنها استفاده میشوند.
توکنها معمولاً به وسیلهٔ محتوای کاراکتر یا محتویات درون یه جریان داده
زمانی که یک lexer توکنها را به parser میدهد، نمایشی که استفاده میشود ، معمولاً لیستی از نمایش اعداد است. به عنوان مثال ، "identifier" با عدد 0 نمایش داده میشود ، "عملگر انتساب" با عدد 1 و "عملگر جمع" با عدد 2 نمایش داده میشود و ... .
توکنها معمولاً با عبارات منظم تعریف میشوند، که توسط مولد تحلیلگر لغوی مانند lex فهمیده میشوند. تحلیگر لغوی (که به صوزت خودکار توسط ابزاری مانند lex یا به صورت دستی تولید میشوند) جریان کاراکترها را می خواند ، واژههای این جراین را شناسایی میکند ، و آنها را به توکنهایی
به دنبال عمل توکنسازی parsing میآید. از آنجا ، دادهٔ تفسیر شده ممکن است، برای استفادهٔ عمومی ، تفسیر ، یا ترجمه (کامپایل) در ساختمان دادههایی بارگذاری شود.
خط ۱۱۲:
=== ارزیابیکننده ===
یک واژه، اگرچه یک رشتهای از کاراکترهاست، باید به شکل خاصی(مثلاً رشتهای از لیترال ها، دنبالهای از حروف) باشند. به منظور ساختن یک توکن، تحلیل گر لغوی گام دومی هم نیاز دارد، ارزیابیکننده، که کارکترهای یک وازه را بررسی میکند تا یک مقداری را تولید کند. ترکیب نوع واژه با مقدارش چیزی است که یک توکن را میسازد، که میتوان آن را به پارسر(تجزیهکننده) داد. برخی از توکنها مانند پرانتزها درحقیقت مقداری ندارند، بنابراین تابع ارزیابیکننده برای آن میتواند چیزی برنگرداند: فقط نوع آن لازم است. بهطور مشابه، گاهی اوقات ارزیابیکننده کل یک واژه را نادیده میگیرد، آن را از پارسر حذف میکند، که برای فضاهای خالی و commentها مفید است. ارزیابیکننده برای شناسهها عموماً سادهاند (عینا خود شناسه را نمایش
به عنوان مثال ف در این کد منبع یک برنامهٔ کامپیوتری، رشتهٔ <blockquote><code>;(net_worth_future= (assets - liabilities</code></blockquote>ممکن است به جریان توکنهای lexical زیر تبدیل شود; فضاهای خالی نادیده گرفته شدهاند و کاراکترهای خاص مقداری ندارند:
خط ۱۲۹:
هر چند ممکن و گاهی اوقات لازم است که ، به دلیل محدودیتهای صدور مجوز پارسرهای موجود یا اگر لیست توکنهای کوچک باشد، تحلیل گر لغوی به صورت دستی نوشته شود، تحلیل گران لغوی غالبا به صورت ابزار خودکار تولید میشوند. این ابزار بهطور کلی عبارات منظم را که نشانههای مجاز در جریان ورودی را توصیف میکنند ،دریافت میکند. هر عبارت منظم با یک قانون تولید در گرامر تحلیل گر لغوی آن زبان برنامهنویسی همراه میشود ،که واژههایی را تولید میکند که با آن عبارت منظم تطبیق داده شوند. این ابزار ممکن است کدهای منبعی تولید کنند که کامپایل و اجرا شوند یا یک جدول انتقال حالت برای یک ماشین حالت متناهی ایجاد کنند(که برای تدوین و اجرا به کد الگو متصل میشود).
عبارات منظم الگوهایی را که ممکن است کاراکترها در واژهها دنبال کنند به صورت فشرده نمایش
عبارات منظم و ماشینهای حالت متناهی ای که آنها تولید میکنند به اندازه کافی برای کنترل الگوهای بازگشتی، مانند "nتا پرانتز باز ، به دنبال آن یک سری عبارت و پس از آن nتا پرانتز بسته "، قوی نیستند. آنها
=== موانع ===
خط ۱۴۲:
در زبانهایی که از spaceهای بین کلمهای استفاده میکنند(مانند بسیاری از زبانها که از الفبای لاتین استفاده میکنند و بیشتر زبانهای برنلمه نویسی)، این روند به صورت منصفانهای سر راست است. اگرچه، حتی در اینجا نمونههای حاشیهای مانند انقباضات، کلمات hyphenated(با خط پیوند نوشته شده) ، شکلک ها، و سازههای بزرگتری مانند URLها (که برای بعضی اهداف ممکن است به عنوان تک توکن شمرده شوند). به عنوان یک مثال کلاسیک "New York-based" را درنظربگیرید، که یک توکن ساز ساده، ممکن است حتی در یک space شکسته شود اگرچه یک شکست بهتر مسلما در خط پیوند نوشته شده(hyphen) است.
توکنسازی خصوصاً برای زبانهای نوشته شده در [[scriptio continua]] دشوار است ، که محدودیتهای کلمه را نمایش
برخی از راهها برای آدرس دهی به مسائل دشوارتر شامل توسعهٔ تخمینهای پیچیدهٔ بیشتر، پرس جوی یک جدول از موارد خاص متداول، یا مناسب کردن توکنها برای یک مدل زبان که ترتیب را در گامهای پردازش بعدی تشخیص میدهد.
خط ۱۶۲:
ابزار عملکرد توسعهٔ سریع،که در توسعهٔ اولیه بسیار مهم اند، هر دو lexer میگیرند زیرا خصوصیات زبان اغلب ممکن است تغییر کند.در ادامه، آنها اغلب ویژگیهای پیشرفتهای را فراهم میکنند ،از جمله شرایط قبل و بعد که برنامهنویسی دستی آنها سخت میباشد. با این حال مولد lexer اتوماتیک ممکن است عدم انعطافپذیری داشته باشد،در نتیجه نیاز به تغییر کاربر،یا یک lexer که کاملاً دستی نوشته شده باشد دارد.
عملکرد lexer دارای اهمیت است و بهینهسازی آن ارزشمند و نیازمند صرف وقت میباشد ، به ویژه در زبانهای پایدار که lexer در آنها غالبا اجرا میشود ( مانند C و Lexer.(HTMLهای تولید شده با lex/flex ، منطقا سریع هستند، اما بیشتر از دو تا سه بار، بهبود آن، امکانپذیر است. گاهی lexerهای
=== لیستی از مولدهای lexer ===
خط ۱۸۶:
بسیاری از زبانها از نقطه ویرگول برای پایان جمله استفاده میکنند .که اغلب اجباری است،اما در بعضی زبانها استفاده از نقطه ویرگول در متن اختیاری است. این کار در مرحله lexerصورت میگیرد. جایی که lexer یک نقطه ویرگول را به جریانی از توکنها تبدیل میکند ، با این وجود در جریان ورودی کاراکترها آماده نیست ف که درج نقطه ویرگول یا درج خودکار نقطه ویرگول نامیده میشود. در این مورد،نقطه ویرگول یک عبارت نرمال گرامی از زبان هست، اما ممکن است که به عنوان ورودی نباشد که تحلیل گر لغوی آن را اضافه میکند. نقطه ویرگول اختیاری است یا پایان دهنده یا این که بعضی اوقات به عنوان جداکننده از مرحلهٔ تجزیه به کار میرود، به ویژه در مورد کامای انتهایی( [[trailing comma]]s ) یا نقطه ویرگول.
درج نقطه ویرگول یکی از خصوصیات BCPL و یکی از نسلهای دور در Go میباشد. هر چند در B یا C وجود ندارد. درج نقطه ویرگول در JavaScript وجود دارد،اگر قوانین پیچیده و مورد انتقاد قرار بگیرند ، برای جلوگیری از مشکلات ، استفاده از نقطه ویرگول توصیه میشود، در حالی که دیگران نقطه ویرگول اولیه، نقطه ویرگول دفاعی، را عمدتا در عبارات مبهم به کار
درج نقطه ویرگول(در زبانهایی که نقطه ویرگول به معنای پایان عبارت است) و ادامهٔ خط ( در زبانهایی که خط جدید به معنای پایان عبارت است) مکمل یکدیگرند . درج نقطه ویرگول به عنوان یک توکن اضافه میشود، اگرچه خط جدید بهطور کلی توکن ایجاد نکند، یا ادامهٔ خط مانع از ایجاد توکن شود و حتی اگر خط جدید بهطور کلی توکن ایجاد کند.
خط ۱۹۸:
با این حال استثناهایی وجود دارد. مثالهایی ساده شامل : درج نقطه ویرگول در Go، که به نگاه کردن به توکن قبلی نیاز دارد،الحاق رشتهٔ متوالی در پایتون که نیازدارد قبل از خروج یک توکن محتوای آن در بافرنگه داری شود (برای اینکه ببیند آیا توکن بعدی یکی literal است یا نه)؛ ونقش off-side در پایتون ، که به نگهداری تعدادی از سطوح فرورفتگی نیاز دارد( در واقع پشتهای از هر سطوح فرورفتگی)، این نمونهها فقط نیاز به زمینهٔ لغوی دارند، و در حالی که تحلیل گر لغوی تا حدی آنها را پیچیده میکند، برای تجزیهکننده و مراحل بعد قابل دیدن نیستند.
یک مثال پیچیده تر هک تحلیل گر لغوی در C است، که کلاس توکن دنبالهای از کاراکترها تا فاز تحلیل گر معنایی،
== یادداشتها ==
|