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

فكرة بناء محرر أو مترجم ب Visual Basic.NET

مغلق
بدأه فواز الشمري في 12 يوليو 2005 · 10 رد · 1,092 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد التحية

كنت قبل فترة احاول عمل محرر لغة يقوم فقط بتلوين الكلمات المحجوز بالستخدام الإصدار السابق من vb وهو vb6

ولكن للأسف الشديد لم انحج في ذلك بسبب البطئ الشديد في معالجة (تلوين الكلمات المحجوزة) كان حتى العشرين سطر ثم تضهر علامات البطئ الشديد

فهل هناك طريقة محددة ما او اسلوب معين يجب ان يتبع في بناء المحررات ياريت حد يشارك .

#2

كيف تقوم بمعرف الكلمات المحجورز حتى تلونها ؟ ما هي الطريقة ؟ حتى نرى اذا كان يمكن التعديل عليها و جعلها اسرع

#3

هناك كتاب الكتروني (مجاني) يدعى "Disecting a C# Application: Inside SharpDevelop" يمكن تنزيله (و مجموعة أخرى من الكتب المجانية) من هذا الرابط

www.apress.com/free

فيه شرح لسورس برنامج SharpDevelop و هو بيئة تطوير مجانية لـ#C من ضمن ما فيه شرح للمحرر و كيفية عمله. اللغة المستخدمة هى #C و ليست فيبي و لكن لن تجد أي صعوبة تذكر في فهم الكود.

#4

اخي العزيز crazy-man

فكرتي كانت كما يلي :

وللأسف حاولت باستخدام vb.net بنفس الفكرة وكانت النتيجة ألعن من vb6

وهوا يبدو لعدم صحة الخوارزمية المتبعة وهي كما يلي :

أقوم بوضع كافة الكلمات المحجوزة في ملف ثم اقوم بقراءة الكلمات ووضعها في مصفوفة

بعد ذلك اقوم بعملية البحث في النص بالكامل والذي تم كتابتة في أداة rtf باستخدام instr في الإصدار السابق أو find في vb.net في الأداة rtf

عملية ترتيب الفحص كما يلي

قم بالبحث عن أول خانة في المصفوفة في النص فإذا وجدها يقوم بوضع الموقع في متغير

يتم وضع مؤشر الكتابة في بداية الكلمة في النص ثم يتم التضليل من بداية الكلمة حتى طول الكلمة المحجوزة بعد ذلك يتم تغير لون الكلمة .

بعد ذلك أعد عملية البحث من موقع الكلمة هذه فإذا وجدها عمل نفس الخطزات السابقة وإلى يعدو لبداية الخوارزمية لينتقل إلى الخانة الثانية ليقوم بالبحث عن الكلمة التالية وهكذا

يعني العملية إذا وجد الكلمة المحجوزة يقوم بالتضليل عليها ثم يلونها ثم يعود للبحث مرة أخرى عن نفس الكلمة في النص حتى النهاية لتوقع وجدو كلمة اخرى بعد هذا كلة يعيد موشر الماوس الى المكان الذي كان علية قبل عملية البحث .

هذا الكود يتم وضعه في حدث change التابع للrtf

أشكرك بعنف اخي System Down هذا ماكنت ابحث عنه إن شاء الله يكون هوا الي ابحث عنه

سوف اقوم بتنزيل الكتاب وشكرا لك .

#5

طبعا هذه طريقة ستبطئ عمل البرنامج

انا فكرت في طريقة و طبقتها و اشتغلت لكني لم أكملها لبعض الأنشغال و الفكرة كالتالي

عند ضغط المستعمل على Space يقوم البرنامج بتذكر ال Length للتكست و يضعها في متغير Start مثلا و يقوم أيضا بجعل قيمة متغير من نوع Boolean لنفرض أن اسمه FrstSpacePresse تساوي True ثم يبدا المستعمل بكتابة النص الذي يريد ثم اذا ضغط مرة أخرى على ال Space يتم التأكد من المتغير FrstSpacePresse اذا كان يساوي True فاذا قد تم ضغط ال Space قبلا و تم حفظ بداية الكلمة الجديدة في المتغير Start ثم نحول قيمة المتغير FrstSpacePresse الى False نقوم بحفظ ال Length للتكست بعد أن ضغطنا على Space مرة أخرى في متغير اسمه مثلا EndWord و لن يبقى لنا سوى استخراج الكلمة التي تبدأ من Start و تنتهي في EndWord و نقارنها بال KeyWords الموجودة عندنا اذا كانت موجودة فعلا نقوم بتضليل الكلمة و اعطائها لون محدد و هكذا .... طبعا هذه فقط الفكرة العامة للبرنامج لكن التطبيق قد يختلف

تم تعديل هذه المشاركة بواسطة crazy-man في 17 يوليو 2005 في 04:53

#6

اذا كنتم سمعتم ببرنامج eclipse فهو IDE شهير للجافا (و لأي لغة .. لانه مفتوح المصدر و يمكن كتابة plug-ins لتوفير دعم لاي لغة).

المهم انا لا ادعي اني افهم طريقته بالكامل, و لكنها شيء من هذا القبيل (طريقة eclipse في التلوين).

الفكرة تقوم على تقسيم النص في الملف الى partitions او اقسام, كل قسم له اسم معين, و تستطيع اعطاء كل قسم خصائص لون معينة.

هناك مرحلتين:

اولا قسم النص الى partitions بحيث كل قسم له اسم معين.

بعدين يتم المرور على الاقسام هذه و تلوين أجزاء منها.

ما يحدث في العادة هو تلوين قسم كامل بلون معين.

المهم بلا دوخة راس, سأشرح بطريقة مبسطة لا تنجز سوى ما تريد, بعيدا عن الـ OOP:

عندك النص و عندك مؤشر عليه, احفظ مكان المؤشر, و ارسله الى دالة تقوم بمحاولة قرائة النص الموجود عند المؤشر, هذه الدالة ستقوم بعمل واحد من امرين: اما ان تحرك المؤشر, او انها لا تحرك المؤشر.

اذا لم تقم الدالة بتحيرك المؤشر, فقم انت بتحريكه خطوة واحدة و أرسله الى الدالة مرة أخرى.

و هكذا .. الى نهاية الملف.

طيب, ماذا تفعل هذه الدالة بالمؤشر؟

ستقوم بمحاولة قرائة النص الموجود عند المؤشر, اذا وجدت كلمة (يعني حروف و ارقام, و ليس مجرد خرابيش !<>@$) فإنها ستقوم بتحريك المؤشر و قرائة الكلمة, اذا وجدت ان هذه الكلمة هي من الـ keywords المعروفة لديها فستقوم بتلوينها.

و الا فإنها ستتركها دون تلوين.

اما اذا وجدت شي هو ليس بكلمة فإنها ستتركه و شأنه.

لا اعرف ان كان كلامي مفهوم :blink:

اعتقد انه غير مفهوم ابدا!

طيب احاول بطريقة اخرى:

خلي عندك مؤشر يدلك على ما قمت بمسحه (مسح يعني scan و ليس حذف!!) او قرائته من النص.

قم بوضع المؤشر في بداية النص (في الملف).

عندما تقرأ حرفا من النص, فإن المؤشر سيتحرك, لذلك من الان فصاعدا عندما أقول "إقرأ من النص" يعني ان المؤشر سيتحرك. طيب؟

زين, قم بقرائة حرف من النص, اذا بدا هذا الحرف و كانه بداية كلمة, فقم بحفظ مكانه و قم بقرائة الحروف بشكل متتالي حتى تنتهي الكلمة. و احفظ المؤشر ايضا, فأنت الان تعرف مكان بداية و نهاية الكلمة.

الان قم بمقارنة هذه الكلمة مع مصفوفة الـ keywrods عندك, فاذا كانت هذه الكلمة هي keyword قم بتلوينها, و إلا فاتركها.

ثم عد من جديد و قم بقرائة الحروف من الملف .. و هكذا الى ان تصل الى النهاية.

كيف تعرف انك الان في كلمة؟ بسيطة, الكلمة تبدأ بحرف, و ما دمت تقرأ حروفا فانت لا تزال في الكلمة .. و لكن بمجرد ان تقرأ شيئا ليس بحرف, مثل $ فقد انتهت الكلمة.

الفرق في هذه الطريقة انك تقوم بقرائة الملف مرة واحدة.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 17 يوليو 2005 في 05:44

#7

للمشاركة

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#8

بعد التحية

المشكلة ليست في كيفية فحص الكلمات المحجوزة لكن المشكلة في كيفية تلوينها .

على سبيل المثال هناك من يقوم بعمل الكلمات المحجوزة في ملفات xml على شكل كتل ويقوم بوضع لكل كتلة اسم اي مقسمة على اقسام المتغيرات قسم العمليات الحسابية قسم والكلمات الأخرى قسم وهكذ

لكن :

عملية البحث في النص :

نحن نقوم بعملية البحث على النص بالكامل لتوقع الكثير من الإحتمالات فلو فرضنا وجود علامة = بعد الكلمة بدون وجود space لن تستطيع الدالة تميز العلامات الرياضية كما هي فكرة الأخ crazy-man

هذا شي الشي الأخر هوا في حال عمل التعليقات مثل */ و /* فهناك مشكلة في الفراغات ستكون .

وهذه المشكلة احاول ان اعالجها لكن يزاد البطئ وهي مرحلة من المراحل الأولى قبل التلوين وهي فصل الكلمات المحجوزة وترتيبها حسب التصنيف التالي :

المتغيرات - العلامات الرياضية - التعليقات - الدوال - الكلمات المحجوزة - عبارات المقارنة - التعليقات.

في حكاية التيوين كيف يتم البحث في الكلمات المجوزة والخوارزمية المتبعة لذلك .

لاحض في بعض البرامج انهم يستخدمو الذاكرة والتعامل مع العناوين لكن دون ان افهم هذه الطريقه

يعني ماهي الطريقة التي يتم فيها تلوين الكلمة في النص .

اخي hasan_aljudy فعلا طريقة البرنامج الي ذكرته الكير يعملوها بهذا الشكل في تقسيم الكلمات لك هل لديك فكرة كيف يتم التلوين

سوف ارفق لكم الكود الي حاولت فية ونجت لكن المشكلة البطئ وهوا بـ vb6 وهو نفس الفكرة يمكن تتطبيقها على vb.net بدون اي تعب.

#9

هل احد من الأخوان لدية فكرة او يعرف شي عن sysntax Highlighting كيفية تلوين الكلمات المحجوزة .

ياريت ولوا حتى يضع روابط ممكن تفيد .

#10

يتم استخدام الأداة rich edit box في ذلك

أرجوا أن يتاح لي وقت قريب لأتحدث عنه.

ملاحظة : تلوين الكلمات سهل جداً عند التصحيح الأخطاء وغيرها...

#11

لاداعي للحديث عن الأدة rtf فهيا معروفة

لكن أتمنى ان ارى سرعة التلوين وهي تلوين الكلمات المحجوزة في الكود الذي ستقوم بتكابته في إنتضارك

وشكرا لك على المشاركة

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…