تحلیل واژگانی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
FreshmanBot (بحث | مشارکت‌ها)
جز ←‏مولد تحلیل گر لغوی (Lexer Generator): اصلاح فاصله مجازی با استفاده از AWB
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی با استفاده از AWB
خط ۱۰۹:
 
=== اسکنر ===
در مرحله اول، اسکنر، معمولاً مبتنی بر یک [[ماشین‌های حالات متناهی|ماشین حالت متناهی]] است که با استفاده از اطلاعات کاراکترهایی با توالی ممکن کدگذاری شده است که این کاراکترها می‌توانند هر یک از توکن‌ها مورد استفاده باشد. به عنوان مثال، یک توکن عدد صحیح می‌تواند دارای هر توالی از ارقام باشد.در بسیاری از نمونه ها اولین کاراکتری که فضای خالی نباشد، می تواند برای استنباط نوع توکن بعدی مورداستفاده قرار گیرد و زیردنباله ی کارکترهای ورودی بعد از آن در یک زمان پردازش می شوند تاوقتی که به کاراکتری برسد که که در مجموعه ی کاراکترهای قابل قبول برای توکن ها نباشد (که اصطلاحا این عمل ، قانون حداکثر جویدن یا طولانی ترین تطبیق نامیده می شود). در بسیاری از زبان هازبان‌ها قانین تولید واژه بسیار پیچیده تر است و ممکن است درگیر عقب گرد برروی کاراکترهای خوانده شده ی قبلی شود. به عنوان مثال در C تنها یک کاراکتر 'L' برای تمایز قائل شدن بین یک شناسه که با 'L' شروع می شود و یک کاراکتر از یک رشته کافی نیست.
 
=== ارزیابی کننده ===
خط ۱۴۰:
* تمام رشته های به هم پیوسته کاراکترهای الفبا، بخشی از توکن هستند؛ به همین ترتیب اعداد.
* توکن ها با کاراکترهای فضای خالی جدا می شوند، مانند space یا line break ، یا کاراکترهای نشانه گذاری.
در زبان هایی که از space های بین کلمه ای استفاده می کنند(مانند بسیاری از زبان هازبان‌ها که از الفبای لاتین استفاده می کنند و بیشتر زبان های برنلمه نویسی)، این روند به صورت منصفانه ای سر راست است. اگرچه، حتی در اینجا نمونه های حاشیه ای مانند انقباضات، کلمات hyphenated(با خط پیوند نوشته شده) ، شکلک ها، و سازه های بزرگتری مانند URL ها (که برای بعضی اهداف ممکن است به عنوان تک توکن شمرده شوند). به عنوان یک مثال کلاسیک "New York-based" را درنظربگیرید، که یک توکن ساز ساده، ممکن است حتی در یک space شکسته شود اگرچه یک شکست بهتر مسلما در خط پیوند نوشته شده(hyphen) است.
 
توکن سازی خصوصا برای زبان های نوشته شده در  [[scriptio continua]] دشوار است ، که محدودیت های کلمه را نمایش نمی دهند، مانند یونانی باستان، چینی، یا تایلندی. زبان های ترکیبی مانند کره ای نیز توکن سازی را دشوار می کنند.
خط ۱۸۴:
 
=== درج نقطه ویرگول (Semicolon insertion) ===
بسیاری از زبان هازبان‌ها از نقطه ویرگول برای پایان جمله استفاده می کنند .که اغلب اجباری است،اما در بعضی زبان هازبان‌ها استفاده از نقطه ویرگول در متن اختیاری است. این کار در مرحله lexerصورت می گیرد. جایی که  lexer یک نقطه ویرگول را به جریانی از توکن ها تبدیل می کند ، با این وجود در جریان ورودی کاراکترها آماده نیست ف که درج نقطه ویرگول یا درج خودکار نقطه ویرگول نامیده می شود. در این مورد،نقطه ویرگول یک عبارت نرمال گرامی از زبان هست، اما ممکن است که به عنوان ورودی نباشد که تحلیل گر لغوی آن را اضافه می کند. نقطه ویرگول اختیاری است یا پایان دهنده یا این که بعضی اوقات به عنوان جداکننده از مرحله ی تجزیه به کار می رود، به ویژه در مورد کامای انتهایی( [[trailing comma]]s ) یا نقطه ویرگول.
 
 درج نقطه ویرگول یکی از خصوصیات BCPL و یکی از نسل های دور در Go می باشد. هر چند در B  یا C  وجود ندارد. درج نقطه ویرگول در JavaScript وجود دارد،اگر قوانین پیچیده و مورد انتقاد قرار بگیرند ، برای جلوگیری از مشکلات ، استفاده از نقطه ویرگول توصیه می شود، در حالی که دیگران نقطه ویرگول اولیه، نقطه ویرگول دفاعی، را عمدتا در عبارات مبهم به کار می برند.