بسم الله الرحمن الرحيم... اليوم ان شاء الله سأحاول أن أبدأ معكم المرحلة الأولى في علوم اللغات و المترجمات و ندعو الله أن يوفقنا حتى نصل الى مرحلة معقولة من الدروس ان شاء الله المرحلة الأولى ماهي لغات الحاسب؟؟ لغة الحاسب الأساسية هي الMachine Code أو لغة الإلة و هي اللغة التي لا يفهم الحاسب غيرها (معلومة قديمة و لكنها البداية الصحيحة) و لأنها ليست لغة بسيطة و لا يمكن بناء نُظُم أو تطبيقات بها لعدة أسباب منها أنها تعتمد على نوع المعالج و الhardware المصاحب له .. أيضاً غير مناسبة لعقلية المطورين بل تناسب أكثر علماء الHardware و المشتغلين به.. لهذا دعت الحاجة الى ظهور لغات أخرى أسهل و أكثر تخصصاً مثل ال Assembly و B و C و ++C و COBOL و Fortran و ...... الخ و لكن في النهاية جميع اللغات السابقة يجب أن تتحول في نهاية المطاف الى Machine Code و هذا ما تقوم به المترجمات المترجمات أيضاً لها أنواع 1- الAssembler الأسمبلر هو اسم الmodule الذي يقبل مدخل(input) من لغة الAssembly و يُنتج (output) مُخرج من لغة الإلة Machine Code و في العادة يكون تصميم الأسمبلر بسيط فهو مجرد Line by Line Translation أي مترجم سطري و هذا لطبيعة الAssembly البسيطة فهو يقوم بعمل Recognition للأوامر (mnemonics) و تحويلها الى الmachine code المناظر لها متبوعاً بالقيم التي تليه بالطبع الAssemblers الأحدث أكثر تعقيداً و لكن مازالت الفكرة الأساسية واحدة... 2- الCompiler الCompiler هو اسم الmodule الذي يقبل input من لغة High Level مثل الC و يعطي output من الObject Code المناظر له.. مقارنةً بما يفعله الAssembler فالCompiler أكثر تعقيداً فهو يقوم بعمل Analysis للInput و يحاول التعرف على المكونات الأساسية للكود(Tokens) ثم يحاول مقارنة مجموعات ال Tokens المتتالية بالGrammar Rules التي يعرفها حتى يصل الى المناسب و من ثم يفهم المقصود و يترجمه و هذا أصعب كثيراً بما يقوم به الassembler و يزداد صعوبة مع سهولة اللغة و رقيها.. و من الCompiled Languages مثلاً ال ++C/C و ال COBOLو الSNOBOL و الPascal 3-الInterpreter الinterpreter هو اسم الmodule الذي يقوم بعملية الترجمة للسطر ثم ينتظر تنفيذه ثم ينتقل للسطر الأخر و هكذا و هو يشبه الى حد ما الCompiler و لكنه في أغلب الأحيان لا يمكن ان تُنتج منه Executable File أي أنه يجب أن يقوم الinterpreter بعمل الترجمة كل مرة لتشغيل البرنامج كما أن مهمته تزداد تعقيداً في وجود الLoops و الConditions و لأنه يجب عليه أن يترجم الloop كلها ثم يحتفظ بالكود الخاص بها في الذاكرة حتى يكررها ثم ينتقل بعد هذا الى مابعدها... مقارنةً بينها و بين الCompilers فالInterpreters أبطأ كما أنها تحتاج الى ذاكرة أكبر لعملية الInterpretation أو الترجمة و لكن توجد مميزات أنك تستطيع اكتشاف الأخطاء و تعديلها أثناء عمل البرنامج دون الحاجة الى اغلاقه و تعديله و بناؤه من جديد ثم اعادة تشغيله و من اللغات الInterpreted الHTML و الVisual Basic و الJava Script و الPHP و الASP والpython و الPerl الشكل العام للCompiler او مايسمى Compiler Anatomy تشريح الCompiler يتكون الCompiler من 4 أقسام أساسية 1- الLexical Analyzer 2- الSyntax & Semantic Analyzer 3- الCode Generator 4- الCode Optimzer و يستخدم كلهم مايُسمى بالSymbol Table و سأحاول أن أصل الى هذه النقطة ان شاء الله و سنتعرض لكل نقطة بالتفصيل قدر المستطاع 1- الLexical Analyzer أو ما يُسمى أحياناً الSCANNER الSCANNER كما هو واضح من الاسم يقوم بعمل scan أو مسح للSource Code و يقوم بعدة مهام أساسية 1- تجميع الجمل التي تتكون من عدة سطور في سطر واحد 2- ازالة كل ما ليس له علاقة بالبرنامج مثل الcomments و المسافات الزائدة 3- التعرف على المكونات الأساسية للغة Basic Entities مثل - الثوابت Constants - المُعرفات Identifiers مثل الVariables و الKeywords - الOperators أو العوامل مثل ال+ و / و * أو < و > و هكذا 4- عمل التغييرات اللازمة في الSymbol Table عن المكونات التي تم التعرف عليها ليتم استخدامها في باقي المراحل أما الOutput الصادر عن الScanner يكون في شكل Tokens كما ذكرنا من قبل و كل Token يحتوي على نوع المُعرف و أحياناً عنوانه في الSymbol Table مثال على الLexical Analyzer تخيل أن الInput Code هو
IF A >= B + C THEN A = B
14 99.8 61 99.9 51 99.12 15 99.8 57 99.9
Operation Operand1 Operand2 Result
ADD C B T1GTE T1 A T2BNZ T2 L1 STO B ALBL L1