TGViewer
CleverDevs CleverDevs @cleverdevs · 10.9K subscribers
Post #2455 9.38K
درک مفهوم 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
  • 👍 23
  • ❤ 11
  • 🔥 3
  • 👎 1
More from @cleverdevs
  1. Sep 24, 2026شرکت کوالکام اعلام کرده قرار هست پشتیبانی رسمی لپتاپهای مجهز به چیپ Snapdragon X2 از لینوک…
  2. Sep 23, 2026توی کدای کرنل برای سیستم‌کال reboot شما باید دوتا magic value به تابع بدید تا کرنل برای ای…
  3. Sep 21, 2026یه نفر اومده و یه موزیک پلیر لینوکس به اسم sung با cpp و qt نوشته که طراحی زیبا و ویژگی ها…
  4. Sep 18, 2026خب اومدم یک پست شبانه بذارم و برم تا چند روز دیگه که با یک محتوای خوب برگردم :3 براتون سوا…
  5. Sep 14, 2026بیرجند لاگی ها توی روز برنامه نویس یه چلنج باحال دیگه داشتن: چلنج فشرده سازی! (: توی این ر…
  6. Sep 13, 2026روزتون مبارک https://en.wikipedia.org/wiki/Programmer%27s_Day @CleverDevs - @CleverDevsGp
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →