روند ورود متن و خروج(کامپایل) برنامه
وقتی برنامه ای را تایپ می کنید، یک فایل منبع(Source) ایجاد می کنید. یعنی صفحه ای با متونی شبیه به زبان لاتین که فقط برنامه نویس متوجه آن خواهد شد. این صفحه کاری نمی کند و کامپیوتر هم متوجه آن زبان نمی شود. باید پردازش و عملیاتی(ترجمه) انجام گیرد تا این صفحه تبدیل به زبانی شود که کامپیوتر بتواند آنرا درک کند و برنامه قابل اجرایی را تولید کند(مانند فایلهای سیستم تون).
اولین مرحله در پردازش(ایجاد برنامه)، استفاده از ویرایشگر متنی برای نوشتن کدهای ++C می باشد. شما فایل منبع(Source) را به زبان ++C که شبیه به معماری کامپیوتر هست را می نویسید(به لاتین). بعد باید آنرا به زبان و دستورالعمل های ماشینی(Machine language) تبدیل کنید. این کار بعهده کامپایلر می باشد. کامپایلر برای اینکار عملیات زیر را انجام می دهد:
(برای درک بهتر این موضوع، بر روی یک کامپایلر Open source(منبع باز/متن باز) کار کنید)
ابتدا فایل منبع(Source) خوانده می شود و به تعدادی علایم پیش پرازش(Preprocessor token)
(عناصری که کامپایر می تواند با آنها کار کند. مثل عمگر ها، ثابتها، کلمات کلیدی و...) و کاراکتر های سفید(Blank)(شامل فضاهای خالی، Tab ها و Comment ها) تبدیل می شود. در این مرحله کاراکتر های ویژه(Special) تبدیل می شوند و دستورات جدا که دو یا چند خط اشغال نمودند به یکدیگر پیوند می خورند.
سپس دستورات پیش پردازنده(# دار ها) اجرا می گردند. این دستورات شامل include, define if و... می باشند. در این مرحله تمامی دستوات و ماکروها Expand می شوند و عملیات و ضمیمه های لازم انجام می گیرد.
بعد پردازش کاراکترها و رشته ها انجام می گیرد. در این مرحله برنامه برای صحت شکل گرامری(Syntax) و لغات، تجریه و تحلیل می شود(خطاها و هشدارهای Syntax در این مرحله نمایان می شود). اگر اشتباهات جدی(Fatal) پیدا نشود، یک فایل تجزیه/تحلیل شده(معمولاً با پسوند obj) تولید می گردد(تا با بقیه فایل ها ترکیب شود).
دستور پیش پردازنده include# در هر لحظه می تواند چندین فایل را داخل برنامه ادغام(Merge) کند. و هر بار که کامپایلر به این دستور برخورد می کند، به اندازه محتوایش
موقتاً پردازش را متوقف(Halt) می کند(همینکار رو زبان های دیگه مثل PHP, ASP Net , Python, PERL و... انجام می دهند!).
در آخرین مرحله(ایجاد برنامه فابل اجرا)، پردازش فایل تولید شده(obj) توسط یک پیوند دهنده(Linker یا Link) انجام می شود. اکثر برنامه ها دارای رجوعاتی به روال(Routine) می باشند که در خارج از برنامه جاری وجود دارند. این روال ها باید آدرس یابی و به برنامه شما اتصال داده شوند تا بتوان با آنها کار کرد.
پیوند دهنده(Linker) تمامی فایلها را با هم ترکیب می کند و در نتیجه یک
برنامه قابل اجرا تولید می شود.
تمامی این مراحل توسط کامپایلر انجام می شود. و شما فقط کد می نویسید و بعد با یک کلیک بر روی Build/Make برنامه تان را تولید می کنید(در کامپایلرهای GUI).
منبع:
http://forum.IranPHP.org