الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

lexical analyzer

بدأه jejo ems في 24 أكتوبر 2012 · 3 رد · 968 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

كيفكم اخواني

انا طالبة في علوم الحاسب وعندي مادة مبادئ لغات البرمجة

concepts of programming languages

وعندي مشروع صغير الي هو اسوي parser لبعض خواص لغة الجافا

مثل الكلاس واللوب ....

سويت الـ EBNF

لما جيت اسوي الـ lexical analyzer وقفت

الامثلة الي في الكتاب وفي النت تشتغل ع جملة وحدة

مادري كيف اسويه ع جمل كثيرة

ووظيفته اللي فهمتها انه يشيك كل الكلمات الي بالملف مطابقة للغة بس ماعليه من المعنى والمخرجات حقته هي ارقام الـtoken

طيب هالارقام من وين اجيبها ؟

ولما اخلص وتطلع لي الارقام هذي ايش اسوي فيها ؟

حاسه بغباشة كبيرة ماني فاهمة حاجة !

#2

الـlexical analyser أو محلل الكلمات وظيفته التعرف على مكونات النص وتصنيفها وأيضاً يساعد في إكتشاف الأخطاء إن وجدت. كل ماتحتاجينه إليه أنك تصنفين كل جزء من النص, مثلاً لو كان لديك :

int foo = 10;

سيحاول البرنامج تحليل النص وتصنيف محتوياته, غالباً بإستخدام الـregex. ويفترض أن تكون نتيجة النص السابق شيء مثل :

int -> نوع بيانات
foo -> إسم
=   -> علامة مساواة
10  -> رقم
;   -> فاصلة منقوطة

طبعاً تضعين شروط عند البحث .مثلاً النص يجب أن يمكن أن يحتوي فقط على حروف وأرقام ,لكن لايبدأ بها, ويُمكن أن يحتوي ويبدأ بعلامة _. تمثيل هذا الكلام بإستخدام الـregex :

[a-zA-Z_][a-zA-Z0-9_]*

أذا وجد رمز مثل %$#@ أو جزء لاينطبق عليه أي من القواعد التي وضعتيها فسيعتبره خطأ نحوي في النص.

"نوع بيانات" و "إسم" و "علامة مساواة" هذه تصنيفات tokens أنت تضعينها ولايشترط أن تكون أرقام إلا أن إستخدام الأرقام أبسط. عادة في لغات C/C++ تستخدم الـenum, وهي فعلياً أرقام:

enum Tokens {
    DATATYPE_INT,
    NAME,
    SYMBOL_ASSIGNMENT,
    NUMBER,
    SYMBOL_SEMICOLON,
};
1
#3

شكراً لك ياسيد

طيب لما يخلص lexical من ملف الكود كامل وش يصير يحفظ التوكنات في ملف اخر ؟

#4

بعد تمام عمل ال Lexer يتم تغذية ال Parser بال tokens ثم يتم إنشاء ال AST.

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

مواضيع مشابهة