CleverDevs
8.42K subscribers
709 photos
280 videos
27 files
415 links
به کانال کلوردوز خوش اومدین

سعی میکنیم چیزایی که بنظر کاربردی هستن رو باهاتون به اشتراک بزاریم


🔥لینوکس
🔥برنامه نویسی فرانت‌اند
🔥برنامه نویسی بک‌اند
🔥اخبار تکنولوژی و...

CleverDevs are better than other Devs
💢~> @mmdrsdev
Download Telegram
درک مفهوم Lexer در ساخت زبان های برنامه نویسی

هنگام طراحی و پیاده‌سازی یک زبان برنامه‌نویسی جدید، مرحله Lexical Analysis یا واژه‌کاوی، گام نخست و بنیادین محسوب می‌شود. این مرحله توسط یک مولفه نرم‌افزاری به نام Lexer (که به آن Scanner یا Tokenizer نیز گفته می‌شود) انجام می‌گیرد.

🔹 وظیفه Lexer چیست؟

Lexer مسئول پردازش متن سورس کد کاراکتر به کاراکتر است. هدف اصلی آن، تبدیل این جریان پیوسته از کاراکترها به یک دنباله از واحدهای معنایی کوچک و مشخص به نام توکن (Token) است. هر توکن نمایانگر یک واحد اتمی از زبان تعریف‌شده است که دارای یک معنی و نقش مشخص است.

مثلا کد `int x = 10;` را در نظر بگیرید:

‏* int ⬅️ یک توکن از نوع کلمه کلیدی (Keyword)
‏* x ⬅️ یک توکن از نوع شناسه (Identifier)
* = ⬅️ یک توکن از نوع عملگر (Operator)
* 10 ⬅️ یک توکن از نوع عدد صحیح (Integer Literal)
* ; ⬅️ یک توکن از نوع نشانه‌گذار (Punctuator)

🔹 اهمیت Lexer در فرآیند کامپایل

وجود Lexer برای مراحل بعدی فرآیند کامپایل (مانند Parsing یا تجزیه و تحلیل نحوی) ضروری است. بدون تفکیک و شناسایی توکن‌ها توسط Lexer، بخش‌های بعدی کامپایلر قادر به درک ساختار و معنای کد نخواهند بود. Lexer در واقع یک ورودی سازمان‌یافته و قابل پردازش را برای مراحل سطح بالاتر آماده می‌کند.

🔹 نحوه عملکرد فنی

Lexer عموماً بر اساس عبارات منظم (Regular Expressions) و ماشین‌های حالت متناهی (Finite State Automata) پیاده‌سازی می‌شود. این ابزارها امکان تعریف الگوهای مشخص برای شناسایی انواع مختلف توکن‌ها (مانند کلمات کلیدی، شناسه‌ها، اعداد، عملگرها و غیره) را فراهم می‌آورند و Lexer با انطباق کاراکترهای ورودی با این الگوها، توکن‌های مربوطه را استخراج می‌کند.

نتیجه‌گیری: Lexer به عنوان اولین لایه درک کد، وظیفه تبدیل متن خام به واحدهای معنایی قابل استفاده برای کامپایلر را بر عهده دارد. دقت و صحت عملکرد Lexer، تاثیر مستقیمی بر کارایی و صحت کلی فرآیند کامپایل یک زبان برنامه‌نویسی دارد.

#lexer
@CleverDevs - @CleverDevsGp
👍2311🔥3👎1