میخواستم بدونم که کد زبان های کامپایلری یا مفسری چه فرایندی روشون انجام میشه که تبدیل به زبان ماشین میشه وچگونه این اتفاق میوفته؟؟؟
شیوه عملکرد مفسرهای زبان های تفسیری، کمی با هم فرق دارند.
من شیوه عملکرد PHP رو برات قرار میدم:
هر وقت که شما قطعه کدی رو اجرا میکنید، چه یک کد کوتاه و ساده باشه.. و چه یک وب اپلیکیشن کامل.. این پروسه از طریق interpreter یا مفسر PHP صورت میگیره. که متداول ترین اونها PHP FPM و مفسر CLI هستند.
کار این مفسر ها بسیار ساده ست: کدهای PHP رو میگیرند.. تفسیر میکنند و نتایج رو بر میگردونند
در PHP این پروسه به شکل زیر اتفاق میفته:
کد شما خونده میشه و تبدیل میشه به یه سری کلیدواژه ها، که بهشون توکن (Token) میگیم. این فرایند به مفسر اجازه میده تا بدونه، کدوم قطعه کد در کدوم قسمت از برنامه قرار گرفته; که نام این مرحله Lexing یا Tokenizing هست.
حالا که توکنها رو داریم، مفسر PHP مجموعه توکنها رو آنالیز میکنه و سعی میکنه اونها رو درک کنه. در نتیجه یک "Abstract Syntax Tree" یا یک AST در پروسه ای به نام Parsing به وجود میاد. این AST مجموعه ای از گِره (Node) هاست که مشخص میکنه چه عملیاتی باید اجرا بشه. برای مثال “echo 1 + 1” رو در نظر بگیرید. این دستور در واقع به این معناست که: “نتیجه ۱ + ۱ رو پرینت کن“... یا واقع بینانه تر: “یک عملیات رو پرینت کن، این عملیات ۱ + ۱ هست“
حالا که AST رو داریم، درک عملیات ها و تقدم (precedence) اونها خیلی سادهتر میشه.. برای تبدیل این AST به کدی که قابل اجرا باشه، نیاز به یک واسطه یا Intermediate Representation (IR) داریم; که در PHP اون رو به نام Opcode میشناسیم... و پروسه تبدیل AST به Opcode رو کامپایل کردن (Compilation) میگیم.
حالا که Opcode ها رو داریم، به قسمت جالب کار میرسیم: اجرای کد... PHP موتوری به نام Zend VM داره، که لیستی از Opcode ها رو دریافت و اونها رو اجرا میکنه. پس از اجرای تمام Opcode ها، موتور Zend VM به کارش پایان میده و مراحل اجرای برنامه ما به پایان میرسه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟