Forwarded from | AmirHossein |
استریم ها در PHP - قسمت اول
در PHP، استریم (Stream) یک سازوکار انتزاعی برای مدیریت ورودی و خروجی دادهها است. به زبان ساده، استریمها به شما امکان میدهند انواع مختلف منابع داده (مانند فایلهای سیستم، درخواستهای شبکه، دادههای فشرده و ...) را از طریق یک رابط یکسان بخوانید یا بنویسید.
به جای آنکه برای هر نوع منبع تابعها یا روشهای جداگانهای داشته باشید، PHP با استفاده از استریمها یک مجموعه توابع عمومی (مثل fopen, fread, fwrite و ...) فراهم کرده که با همه این منابع به شکل یکنواخت رفتار میکنند.
هر استریم رَپر (Stream Wrapper) در PHP در واقع یک پروتکل یا طرح (scheme) خاص را پیادهسازی میکند که به صورت scheme:// استفاده میشود. برای مثال، file:// برای دسترسی به سیستم فایل محلی، http:// برای منابع وب، یا php:// برای منابع داخلی PHP استفاده میشود.
PHP به طور پیشفرض تعداد زیادی استریم رپر داخلی دارد که بسیاری از کارهای معمول را پوشش میدهند. شما میتوانید توسط این استریمها به سادگی کارهایی مثل خواندن فایلها، دریافت داده از وب, نوشتن خروجی، خواندن ورودی خام درخواستها و حتی کار با دادههای فشردهشده را انجام دهید، بدون اینکه نگران جزئیات سطح پایین هر کدام باشید.
استریمهای داخلی PHP - php://
1- php://input
این استریم برای دسترسی به دادهٔ ورودی خام HTTP در PHP استفاده میشود. به طور خاص، این استریم محتوای خام بدنهٔ درخواست HTTP را (معمولاً در درخواستهای POST یا PUT) ارائه میکند، بدون هیچگونه پردازش یا parse خودکار.
زمانی که نیاز دارید ورودی خام درخواست را بخوانید (مثلاً دریافت دادههای JSON از یک API کلاینت یا پردازش درخواستهای RESTful)، این استریم بسیار مفید است. برخلاف متغیرهای سراسری مانند $_POST که فقط دادههای form-urlencoded را میگیرند،
این استریم اجازه میدهد انواع دادهها (JSON, XML, متن خام و ...) را مستقیماً از بدنهٔ درخواست دریافت کنید.
در این مثال، محتوای خام ورودی HTTP با file_get_contents از php://input خوانده شده و سپس از JSON به آرایه PHP تبدیل میگردد.
در نهایت نام کاربر خروجی گرفته میشود. اگر درخواست فوق رشتهٔ JSON
را ارسال کرده باشد، خروجی برنامه Hello Ali خواهد بود.
توجه داشته باشید php://input فقط خواندنی است و فقط یک بار میتوان محتوا را از آن خواند، یعنی پس از خواندن، محتوای آن خالی میشود. همچنین در مورد درخواستهای معمولی فرم (مانند multipart/form-data برای آپلود فایل)، استفاده از این استریم توصیه نمیشود، زیرا PHP آن دادهها را قبلاً پردازش کرده است.
2- php://output
این استریم خروجی استاندارد اسکریپت PHP را نمایندگی میکند. هر دادهای که در آن نوشته شود، مستقیماً به خروجی معمول برنامه (همان چیزی که مرورگر دریافت میکند یا در CLI ترمینال نشان داده میشود) فرستاده میشود.
زمانی که بخواهید با توابع استریم دادهای را به خروجی بفرستید (به جای استفاده از echo یا print)، میتوانید php://output را مانند یک فایل باز کرده و در آن بنویسید.
این قابلیت میتواند در سناریوهایی مفید باشد که یک تابع انتظار یک منبع استریم برای خروجی دارد یا هنگامی که میخواهید خروجی را از سایر عملیات جدا کنید.
در این قطعه کد، ما استریم خروجی را باز کردهایم و یک خط متن را با fwrite در آن نوشتیم. نتیجهٔ اجرای این کد نمایش متن ذکر شده در خروجی (مثلاً مرورگر یا کنسول) است. در واقع کاری که fwrite در اینجا انجام میدهد معادل همان echo کردن رشتهها است.
در قسمت های بعدی با سایر استریمها در PHP آشنا خواهیم شد.
#PHP #PHP_streams
@AmirhDeveloper
.
در PHP، استریم (Stream) یک سازوکار انتزاعی برای مدیریت ورودی و خروجی دادهها است. به زبان ساده، استریمها به شما امکان میدهند انواع مختلف منابع داده (مانند فایلهای سیستم، درخواستهای شبکه، دادههای فشرده و ...) را از طریق یک رابط یکسان بخوانید یا بنویسید.
به جای آنکه برای هر نوع منبع تابعها یا روشهای جداگانهای داشته باشید، PHP با استفاده از استریمها یک مجموعه توابع عمومی (مثل fopen, fread, fwrite و ...) فراهم کرده که با همه این منابع به شکل یکنواخت رفتار میکنند.
هر استریم رَپر (Stream Wrapper) در PHP در واقع یک پروتکل یا طرح (scheme) خاص را پیادهسازی میکند که به صورت scheme:// استفاده میشود. برای مثال، file:// برای دسترسی به سیستم فایل محلی، http:// برای منابع وب، یا php:// برای منابع داخلی PHP استفاده میشود.
PHP به طور پیشفرض تعداد زیادی استریم رپر داخلی دارد که بسیاری از کارهای معمول را پوشش میدهند. شما میتوانید توسط این استریمها به سادگی کارهایی مثل خواندن فایلها، دریافت داده از وب, نوشتن خروجی، خواندن ورودی خام درخواستها و حتی کار با دادههای فشردهشده را انجام دهید، بدون اینکه نگران جزئیات سطح پایین هر کدام باشید.
استریمهای داخلی PHP - php://
1- php://input
این استریم برای دسترسی به دادهٔ ورودی خام HTTP در PHP استفاده میشود. به طور خاص، این استریم محتوای خام بدنهٔ درخواست HTTP را (معمولاً در درخواستهای POST یا PUT) ارائه میکند، بدون هیچگونه پردازش یا parse خودکار.
زمانی که نیاز دارید ورودی خام درخواست را بخوانید (مثلاً دریافت دادههای JSON از یک API کلاینت یا پردازش درخواستهای RESTful)، این استریم بسیار مفید است. برخلاف متغیرهای سراسری مانند $_POST که فقط دادههای form-urlencoded را میگیرند،
این استریم اجازه میدهد انواع دادهها (JSON, XML, متن خام و ...) را مستقیماً از بدنهٔ درخواست دریافت کنید.
$json = file_get_contents("php://input");
$data = json_decode($json, true);
echo "Hello " . $data["user"];در این مثال، محتوای خام ورودی HTTP با file_get_contents از php://input خوانده شده و سپس از JSON به آرایه PHP تبدیل میگردد.
در نهایت نام کاربر خروجی گرفته میشود. اگر درخواست فوق رشتهٔ JSON
{"user": "Ali"}را ارسال کرده باشد، خروجی برنامه Hello Ali خواهد بود.
توجه داشته باشید php://input فقط خواندنی است و فقط یک بار میتوان محتوا را از آن خواند، یعنی پس از خواندن، محتوای آن خالی میشود. همچنین در مورد درخواستهای معمولی فرم (مانند multipart/form-data برای آپلود فایل)، استفاده از این استریم توصیه نمیشود، زیرا PHP آن دادهها را قبلاً پردازش کرده است.
2- php://output
این استریم خروجی استاندارد اسکریپت PHP را نمایندگی میکند. هر دادهای که در آن نوشته شود، مستقیماً به خروجی معمول برنامه (همان چیزی که مرورگر دریافت میکند یا در CLI ترمینال نشان داده میشود) فرستاده میشود.
زمانی که بخواهید با توابع استریم دادهای را به خروجی بفرستید (به جای استفاده از echo یا print)، میتوانید php://output را مانند یک فایل باز کرده و در آن بنویسید.
این قابلیت میتواند در سناریوهایی مفید باشد که یک تابع انتظار یک منبع استریم برای خروجی دارد یا هنگامی که میخواهید خروجی را از سایر عملیات جدا کنید.
$fp = fopen("php://output", "w");
fwrite($fp, "Hello World!");
fclose($fp);در این قطعه کد، ما استریم خروجی را باز کردهایم و یک خط متن را با fwrite در آن نوشتیم. نتیجهٔ اجرای این کد نمایش متن ذکر شده در خروجی (مثلاً مرورگر یا کنسول) است. در واقع کاری که fwrite در اینجا انجام میدهد معادل همان echo کردن رشتهها است.
در قسمت های بعدی با سایر استریمها در PHP آشنا خواهیم شد.
#PHP #PHP_streams
@AmirhDeveloper
.
👍28🔥6❤5💯2
داشتم یه ویدیو از جادی میدیدم اینو دیدم . slides یه برنامه ترمینالی برای ساخت ارائه های کوچیکه که سبک و باحاله و با مارکداون کار میکنه
میتونید نحوه نصب و استفادش رو از سایتش ببنید
https://maaslalani.com/slides/
لینک گیت هاب :
https://github.com/maaslalani/slides
#tools
@CleverDevs - @CleverDevsGp
میتونید نحوه نصب و استفادش رو از سایتش ببنید
https://maaslalani.com/slides/
لینک گیت هاب :
https://github.com/maaslalani/slides
#tools
@CleverDevs - @CleverDevsGp
👍33🔥9💯5🤣2❤1
Forwarded from TechTube 𝕏 تک توب
اقای Andrej Karpathy، یکی از موسسان OpenAI، ویدیوی منتشر کرده که در اون مفصل توضیح میده چطوری از مدلهای مختلف هوش مصنوعی استفاده میکنه که اموزش خوبی برای این هست که نقاط قوت و ضعف مدلهای استدلالی و غیراستدلالی و همچنین قابلیتهایی مثل سرچ و دیپ ریسرچ رو بفهمین و بدونین کجاها بهتره از هر کدوم استفاده بشه.
📱 لینک ویدیو در یوتوب
📍 @TechTube
📍 @TechTube
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
How I use LLMs
The example-driven, practical walkthrough of Large Language Models and their growing list of related features, as a new entry to my general audience series on LLMs. In this more practical followup, I take you through the many ways I use LLMs in my own life.…
👍20👌3👎1
یکی از بچه های چنل یه ربات اوپن سورس دانلودر زده که میتونه موزیک رو از یوتوب یا ساندکلاد دانلود کنه
ایدی ربات
@Myplaylists_ir_Bot
لینک گیت هاب ربات
https://github.com/pouriasabaghi/myplaylists_core
اگه خوشتون اومد میتونید استار بدید
#openSource #bots
@CleverDevs - @CleverDevsGp
🔹 ربات موزیک MyPlaylists
🔸 دانلود از SoundCloud
🔸 دانلود از Youtube Music
🔸 جستجو در آرشیو سایت
🔸 جستجو در اینترنت و...
ایدی ربات
@Myplaylists_ir_Bot
لینک گیت هاب ربات
https://github.com/pouriasabaghi/myplaylists_core
اگه خوشتون اومد میتونید استار بدید
#openSource #bots
@CleverDevs - @CleverDevsGp
👍31🔥8💯6🤣6👎1
طوری که پارسپک تونست با یه ویدیو لینوکس رو تبلیغ کنه صدتا لاگ و... نتونستن
@CleverDevs - @CleverDevsGp
@CleverDevs - @CleverDevsGp
🤣90👍12👎3
CleverDevs
طوری که پارسپک تونست با یه ویدیو لینوکس رو تبلیغ کنه صدتا لاگ و... نتونستن @CleverDevs - @CleverDevsGp
بچه ها تو کامنتا پیشنهاد دادن که ویدیوی پیودیپای یوتوبر معروف رو هم ببینید که اومده لینوکس نصب کرده و دلایلش برای نصب لینوکس و ول کردن ویندوز و ... رو گفته پیشنهاد میکنم ببینید
https://www.youtube.com/watch?v=pVI_smLgTY0
اومدن همچین ادمایی سمت لینوکس میتونه سهم لینوکس رو تو بازار دسکتاپ بهتر کنه
#Gnu #linux
@CleverDevs - @CleverDevsGp
https://www.youtube.com/watch?v=pVI_smLgTY0
اومدن همچین ادمایی سمت لینوکس میتونه سهم لینوکس رو تو بازار دسکتاپ بهتر کنه
#Gnu #linux
@CleverDevs - @CleverDevsGp
👍39🔥8🤣4
یکی از هوش مصنوعیای های باحال deepwiki هست که میاد ریپوی گیت هاب رو تحلیل میکنه و براش ویکی میسازه
فقط کافیه تو ادرس ریپو github رو با deepwiki عوض کنید اگه از قبل براش ویکی تولید شده باشه میتونید بخونید و اگه نه میتونید درخواست بدید تا اون ریپو رو هم ایندکس کنه
مثلا ریپوی
https://github.com/MohammadRostamiorg/dnsChanger
ویکیش میشه این :
https://deepwiki.com/MohammadRostamiorg/dnsChanger
#ai #tools
@CleverDevs - @CleverDevsGp
فقط کافیه تو ادرس ریپو github رو با deepwiki عوض کنید اگه از قبل براش ویکی تولید شده باشه میتونید بخونید و اگه نه میتونید درخواست بدید تا اون ریپو رو هم ایندکس کنه
مثلا ریپوی
https://github.com/MohammadRostamiorg/dnsChanger
ویکیش میشه این :
https://deepwiki.com/MohammadRostamiorg/dnsChanger
#ai #tools
@CleverDevs - @CleverDevsGp
👍31🔥9💯1
✳️ وبسایت اتومیشن سازی حرفه ای و مدرن!
وبسایت n8n که به تازگی خیلی ترند و بولد شده یک ابزاری هستش که بدون نیاز به برنامه نویس یا نیروی انسانی خاصی و بصورت No code یا Low code میتونید کارهای مجازیتون رو بهش بسپارید و حتی آسونترش کنید.
برای آشنایی بیشتر با محیط و نحوه کار کردن n8n میتونید ویدیو جادی رو از یوتیوب مشاهده کنید.
#n8n #AI #tools
@CleverDevs - @CleverDevsGp
وبسایت n8n که به تازگی خیلی ترند و بولد شده یک ابزاری هستش که بدون نیاز به برنامه نویس یا نیروی انسانی خاصی و بصورت No code یا Low code میتونید کارهای مجازیتون رو بهش بسپارید و حتی آسونترش کنید.
برای مثال استخراج هر نوع دیتا از وبسایت های مختلف و دریافت اونا از طریق ربات تلگرامی، یا اتوماتیک سازی بعضی از امور که تحت وب انجام میدین برای مثال پیدا کردن پروژه از تمام سایت های فریلنسینگ ایرانی؛ دریافت کد ورود به برنامه یا سایت از طریق ربات با استفاده از کانکت کردن ایمیل و ربات و هوش مصنوعی به هم.
برای آشنایی بیشتر با محیط و نحوه کار کردن n8n میتونید ویدیو جادی رو از یوتیوب مشاهده کنید.
#n8n #AI #tools
@CleverDevs - @CleverDevsGp
👍31❤4🔥4
پروژه gitc که یکی از بچه های چنل توسعه داده یک ابزار cli که براساس تغییرات کدی ک دادید چیکیدش رو به ai با پرامپ خاص، سبک و کانفیگ های مختلف ارسال میکنه و ی گیت کامیت مسیج کامل و خلاصه تحویل میده
فعلا فقط openai ساپورت میکنه
در اینده شاید دیپ سیک و گراک هم اضافه بشه
https://github.com/rezatg/gitc
#git
@CleverDevs - @CleverDevsGp
فعلا فقط openai ساپورت میکنه
در اینده شاید دیپ سیک و گراک هم اضافه بشه
اگه براتون جالبه، خوشحال میشم یه نگاهی بهش بندازید، استار بدید، یا اگه ایدهای برای بهبودش دارید یا دوست دارید مشارکت (contribute) کنید، در خدمتم.
https://github.com/rezatg/gitc
#git
@CleverDevs - @CleverDevsGp
❤32🔥13👍9🤣3
Forwarded from AI Pulse (Mohammad)
گوگل در کنفرانس دیشب از Gemini Diffusion رونمایی کرد. یه مدل آزمایشی که بهجای پیشبینی کلمهبهکلمه، از تکنیک "دیفیوژن" (پخش تدریجی) برای تولید متن استفاده میکنه. این سیستم دقیقا مشابه چیزیه که قبلا در مدل های خانواده Mercury دیده بودیم.
برخلاف مدلهای زبانی سنتی که متن رو کلمهبهکلمه تولید میکنن، Gemini Diffusion از روشی الهامگرفته از تولید تصویر استفاده میکنه: اصلاح نویز طی چند مرحله.
این سیستم با یه سری نویز تصادفی شروع میکنه و کمکم اون رو به بخشهای کامل و منسجم متن تبدیل میکنه. این روش اجازه میده در میانهی مسیر، اصلاحات انجام بشه و کنترل بیشتری روی خروجی داشت. به گفتهی دیپمایند، این کار باعث میشه خروجیها منسجمتر و از نظر منطقی، مرتبطتر باشن؛ چیزی که مخصوصاً برای کارهایی مثل تولید کد و ویرایش متن خیلی مؤثره، چون دقت، انسجام و امکان بازبینی تو این حوزهها خیلی مهمه.
Gemini Diffusion بهجای اینکه متن رو از چپ به راست و بهصورت خطی تولید کنه، یکباره بخشهای کامل از متن رو تولید میکنه — و این کار رو خیلی سریعتر از مدلهای سنتی انجام میده. دیپمایند گفته این سیستم میتونه با سرعت ۱۴۷۹ توکن بر ثانیه (بدون احتساب سربار سیستم) کار کنه و تأخیر اولیهی اون فقط ۰.۸۴ ثانیهست.
بهگفتهی «برندن اوداناهیو»، پژوهشگر دیپمایند، این مدل توی کارهای برنامهنویسی حتی میتونه به سرعت ۲۰۰۰ توکن در ثانیه هم برسه، حتی وقتی سربارهایی مثل توکنیزیشن، آمادهسازی و بررسیهای ایمنی رو هم در نظر بگیریم.
«اوریول وینیالز»، معاون پژوهش دیپمایند و یکی از مدیران پروژه Gemini، عرضهی این مدل جدید رو یه دستاورد شخصی توصیف کرده و گفته: «همیشه آرزو داشتم بتونم نیاز به تولید متن از چپ به راست رو حذف کنم.» توی نسخهی نمایشی مدل، سرعت خروجی اونقدری بالا بوده که برای دیدن عملکردش، مجبور شدن ویدیو رو آهسته پخش کنن.
در آزمونها، Gemini Diffusion عملکردی تقریباً برابر با نسخهی Gemini 2.0 Flash Lite داشته. توی وظایف برنامهنویسی مثل HumanEval (با دقت ۸۹.۶٪ در مقابل ۹۰.۲٪) و MBPP (۷۶٪ در مقابل ۷۵.۸٪) نتایج تقریباً مساوی بوده.
حتی توی برخی آزمونها مثل LiveCodeBench (۳۰.۹٪ در مقابل ۲۸.۵٪) و LBPP (۵۶.۸٪ در مقابل ۵۶٪)، Gemini Diffusion کمی بهتر ظاهر شده. با این حال، توی حوزههایی مثل استدلال علمی (GPQA Diamond) و آزمون چندزبانهی Global MMLU Lite ضعیفتر عمل کرده و بهترتیب امتیازهای ۴۰.۴٪ و ۶۹.۱٪ رو گرفته، در حالی که مدل Flash Lite امتیازهای بالاتری بهدست آورده (۵۶.۵٪ و ۷۹٪).
به این ترتیب، برای اولینبار یه مدل زبانی مبتنی بر تکنیک دیفیوژن تونسته به سطح عملکرد مدلهای رایج فعلی برسه — حتی با وجود اینکه Gemini 2.0 Flash-Lite یه مدل اقتصادیتر و قدیمیتر از گوگله.
«جک ری»، دانشمند ارشد دیپمایند، این دستاورد رو یه «لحظهی تاریخی» دونسته. تا پیش از این، مدلهای خودبازگشتی (autoregressive) همیشه توی کیفیت متن عملکرد بهتری داشتن و مشخص نبود که مدلهای دیفیوشن بتونن بهشون برسن. ری این موفقیت رو نتیجهی تحقیقات متمرکز و حل «تعداد زیادی» از چالشهای فنی دونسته.
@aipulse24
برخلاف مدلهای زبانی سنتی که متن رو کلمهبهکلمه تولید میکنن، Gemini Diffusion از روشی الهامگرفته از تولید تصویر استفاده میکنه: اصلاح نویز طی چند مرحله.
این سیستم با یه سری نویز تصادفی شروع میکنه و کمکم اون رو به بخشهای کامل و منسجم متن تبدیل میکنه. این روش اجازه میده در میانهی مسیر، اصلاحات انجام بشه و کنترل بیشتری روی خروجی داشت. به گفتهی دیپمایند، این کار باعث میشه خروجیها منسجمتر و از نظر منطقی، مرتبطتر باشن؛ چیزی که مخصوصاً برای کارهایی مثل تولید کد و ویرایش متن خیلی مؤثره، چون دقت، انسجام و امکان بازبینی تو این حوزهها خیلی مهمه.
Gemini Diffusion بهجای اینکه متن رو از چپ به راست و بهصورت خطی تولید کنه، یکباره بخشهای کامل از متن رو تولید میکنه — و این کار رو خیلی سریعتر از مدلهای سنتی انجام میده. دیپمایند گفته این سیستم میتونه با سرعت ۱۴۷۹ توکن بر ثانیه (بدون احتساب سربار سیستم) کار کنه و تأخیر اولیهی اون فقط ۰.۸۴ ثانیهست.
بهگفتهی «برندن اوداناهیو»، پژوهشگر دیپمایند، این مدل توی کارهای برنامهنویسی حتی میتونه به سرعت ۲۰۰۰ توکن در ثانیه هم برسه، حتی وقتی سربارهایی مثل توکنیزیشن، آمادهسازی و بررسیهای ایمنی رو هم در نظر بگیریم.
«اوریول وینیالز»، معاون پژوهش دیپمایند و یکی از مدیران پروژه Gemini، عرضهی این مدل جدید رو یه دستاورد شخصی توصیف کرده و گفته: «همیشه آرزو داشتم بتونم نیاز به تولید متن از چپ به راست رو حذف کنم.» توی نسخهی نمایشی مدل، سرعت خروجی اونقدری بالا بوده که برای دیدن عملکردش، مجبور شدن ویدیو رو آهسته پخش کنن.
در آزمونها، Gemini Diffusion عملکردی تقریباً برابر با نسخهی Gemini 2.0 Flash Lite داشته. توی وظایف برنامهنویسی مثل HumanEval (با دقت ۸۹.۶٪ در مقابل ۹۰.۲٪) و MBPP (۷۶٪ در مقابل ۷۵.۸٪) نتایج تقریباً مساوی بوده.
حتی توی برخی آزمونها مثل LiveCodeBench (۳۰.۹٪ در مقابل ۲۸.۵٪) و LBPP (۵۶.۸٪ در مقابل ۵۶٪)، Gemini Diffusion کمی بهتر ظاهر شده. با این حال، توی حوزههایی مثل استدلال علمی (GPQA Diamond) و آزمون چندزبانهی Global MMLU Lite ضعیفتر عمل کرده و بهترتیب امتیازهای ۴۰.۴٪ و ۶۹.۱٪ رو گرفته، در حالی که مدل Flash Lite امتیازهای بالاتری بهدست آورده (۵۶.۵٪ و ۷۹٪).
به این ترتیب، برای اولینبار یه مدل زبانی مبتنی بر تکنیک دیفیوژن تونسته به سطح عملکرد مدلهای رایج فعلی برسه — حتی با وجود اینکه Gemini 2.0 Flash-Lite یه مدل اقتصادیتر و قدیمیتر از گوگله.
«جک ری»، دانشمند ارشد دیپمایند، این دستاورد رو یه «لحظهی تاریخی» دونسته. تا پیش از این، مدلهای خودبازگشتی (autoregressive) همیشه توی کیفیت متن عملکرد بهتری داشتن و مشخص نبود که مدلهای دیفیوشن بتونن بهشون برسن. ری این موفقیت رو نتیجهی تحقیقات متمرکز و حل «تعداد زیادی» از چالشهای فنی دونسته.
@aipulse24
🔥22👍12❤3💯1
شهرام رهبری
📌 فرصت ویژه برای دسترسی رایگان به ابزارهای هوش مصنوعی و فضای ذخیرهسازی گوگل پرو - در قالب طرح دانشجویی 🔸 از طریق لینک زیر و با ip آمریکا می تونید به تمام قابلیت ها و خدمات پرو گوگل بدون هیچ هزینه ای دسترسی داشته باشید. 1. ابتدا با یک برنامه تغییر آی پی…
با آی پی آمریکا برید لینک زیر و اشتراک مفتی Gemini Pro بگیرید
http://one.google.com/join/ai-student
@CleverDevs - @CleverDevsGp
http://one.google.com/join/ai-student
@CleverDevs - @CleverDevsGp
👌26👍5🔥3
درک مفهوم Lexer در ساخت زبان های برنامه نویسی
هنگام طراحی و پیادهسازی یک زبان برنامهنویسی جدید، مرحله Lexical Analysis یا واژهکاوی، گام نخست و بنیادین محسوب میشود. این مرحله توسط یک مولفه نرمافزاری به نام Lexer (که به آن Scanner یا Tokenizer نیز گفته میشود) انجام میگیرد.
🔹 وظیفه Lexer چیست؟
Lexer مسئول پردازش متن سورس کد کاراکتر به کاراکتر است. هدف اصلی آن، تبدیل این جریان پیوسته از کاراکترها به یک دنباله از واحدهای معنایی کوچک و مشخص به نام توکن (Token) است. هر توکن نمایانگر یک واحد اتمی از زبان تعریفشده است که دارای یک معنی و نقش مشخص است.
مثلا کد `int x = 10;` را در نظر بگیرید:
*
*
*
*
*
🔹 اهمیت Lexer در فرآیند کامپایل
وجود Lexer برای مراحل بعدی فرآیند کامپایل (مانند Parsing یا تجزیه و تحلیل نحوی) ضروری است. بدون تفکیک و شناسایی توکنها توسط Lexer، بخشهای بعدی کامپایلر قادر به درک ساختار و معنای کد نخواهند بود. Lexer در واقع یک ورودی سازمانیافته و قابل پردازش را برای مراحل سطح بالاتر آماده میکند.
🔹 نحوه عملکرد فنی
Lexer عموماً بر اساس عبارات منظم (Regular Expressions) و ماشینهای حالت متناهی (Finite State Automata) پیادهسازی میشود. این ابزارها امکان تعریف الگوهای مشخص برای شناسایی انواع مختلف توکنها (مانند کلمات کلیدی، شناسهها، اعداد، عملگرها و غیره) را فراهم میآورند و Lexer با انطباق کاراکترهای ورودی با این الگوها، توکنهای مربوطه را استخراج میکند.
نتیجهگیری: Lexer به عنوان اولین لایه درک کد، وظیفه تبدیل متن خام به واحدهای معنایی قابل استفاده برای کامپایلر را بر عهده دارد. دقت و صحت عملکرد Lexer، تاثیر مستقیمی بر کارایی و صحت کلی فرآیند کامپایل یک زبان برنامهنویسی دارد.
#lexer
@CleverDevs - @CleverDevsGp
هنگام طراحی و پیادهسازی یک زبان برنامهنویسی جدید، مرحله 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
CleverDevs
درک مفهوم Lexer در ساخت زبان های برنامه نویسی هنگام طراحی و پیادهسازی یک زبان برنامهنویسی جدید، مرحله Lexical Analysis یا واژهکاوی، گام نخست و بنیادین محسوب میشود. این مرحله توسط یک مولفه نرمافزاری به نام Lexer (که به آن Scanner یا Tokenizer نیز گفته…
اومدم یه اکسپورت از پستای چنل گرفتم دادم جمنای گفتم با لحن من درباره lexer پست بنویس
بعد یکم ادیتش کردم پست کردم ببینم نتیجه چطور میشه
@CleverDevs - @CleverDevsGp
بعد یکم ادیتش کردم پست کردم ببینم نتیجه چطور میشه
@CleverDevs - @CleverDevsGp
30👍29❤4👎3🔥2