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

طريقة اختبار context free grammar

بدأه naifairline في 26 أبريل 2013 · 8 رد · 3,568 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

 

احتاج مساعدة عندي context free grammar

 

كيف اقدر اختبرها ...

 

عندي بعض الجمل العربية واريد ان اختبرها عن طريق context free grammar

 

 

 

انتظر الرد بارك الله فيكم

 

 

والي يقدر يشرحها لي بالتفيصل يرسلي رقمه عالخاص واعطيه تكاليف الشرح

 

 

وبالتوفيق

#2

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

 

ينقل للقسم المناسب

1
(map share people)

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

#3

السلام عليكم ...

ريثما تجد الشخص المناسب للمساعدة , مرفق ملف لما اسعفتني به الذاكرة :rolleyes: , قد يفيدك .

CFG.zip

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

اذا كنت تقصد برمجيا فالموضوع بالتالي في لغة

 

++ c

 

 

مثلا هاذا البرنامج يتحقق CFG للجمل وفق الصيغ التالي

 

1.

she asked him

S-->s.n V.phase

V.phase-->V P

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

 

انظر الى بقية القواعد المعرفة في البرنامج تجدها في النهاية

 

 #include<string.h> #include<iostream.h>main(){		char *p[3]={"him","here","his"}; char *v[5]={"killed","taked","asked","is","was"}; char *s[3]={"he","she","it"}; char *a[3]={"the" ,"a","an"}; char *n[3]={"gril","boy","child"}; char *d[3]={"beauty","old","new"};		int corrrectC=0; //   for the string is correct  increment one for each correted	 char stringEnter[100];	 char *enteST[15]={"\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0"};;		  char rules[20];	 int one_word=0;	 int CountONE=0 ;	 int i,j,cmpS;		cin.get(stringEnter,20);			int len=strlen( stringEnter);			// put each word in one loaction		 for (  i=0;i<len;i++)		 {			 if (stringEnter==' ')			 { one_word++;			 // the size of enterST is 3			 if (one_word==3)			 break;			  CountONE=0;}			  else				{ *(enteST[one_word]+ CountONE)= stringEnter  ;					CountONE++;				} }					cout<<"\none word in line\n"  ;				for (  i=0;i<=one_word;i++)						  cout<<enteST<<endl;			//checked if rule is corrected				for (  i=0;i<=one_word;i++){			for (  j=0;j<3;j++){		 cmpS=strcmp( enteST,s[j]);			 if (cmpS==0 )				{ rules='s';				 continue; }}				 for (  j=0;j<5;j++)  {				  cmpS=strcmp( enteST,v[j]) ;			 if (cmpS==0 )					{ rules='v';				 continue; }}				 for (  j=0;j<3;j++){			  cmpS=strcmp( enteST,p[j]) ;			 if (cmpS==0 )					{ rules='p';				continue; }}					 for (  j=0;j<3;j++){			  cmpS=strcmp( enteST,n[j]) ;			 if (cmpS==0 )					{ rules='n';				continue; }}					 for (  j=0;j<3;j++){			  cmpS=strcmp( enteST,a[j]) ;			 if (cmpS==0 )					{ rules='a';				continue; }}					 for (  j=0;j<3;j++){			  cmpS=strcmp( enteST,d[j]) ;			 if (cmpS==0 )					{ rules='d';				continue; }}					}					  // for rule1 she asked him				 if (( rules[0]=='s') && ( rules[1]=='v') &&( rules[2]=='p'))				 cout<< "the Rule1 is corrected(S.ame Verb Prounoun)" ;				 // for rule2 the beauty gril				else if (( rules[0]=='a') && ( rules[1]=='d') &&( rules[2]=='n'))				 cout<< "the Rule2 is corrected(aritcle adjective num)" ;				 // for rule3 she is new				else if (( rules[0]=='s') && ( rules[1]=='v') &&( rules[2]=='d'))				 cout<< "the Rule3 is corrected(aritcle adjective num)" ;				 // for rule4 is she new?					else if (( rules[0]=='v') && ( rules[1]=='s') &&( rules[2]=='d'))				 cout<< "the Rule4 is corrected(aritcle adjective num)" ;				 else						 cout<< "the Rule is not corrected" ;					 return(0);}

اما الاشتقاقات مثلا اشتقاقات   وa(bc)^i a

اي اذا دخلنا في شاشة التنفيذ اي التعابير التالية يقول لك التعبير صحيح

aa

abca

abcbca

abcbcbca

abcbcbcbca

 

 

#include<iostream.h>main(){	 char state[20];	 cin.get(state,20);	 int len=strlen(state) ;	 int bc=0;					// rules a(bc)*a					if ( ( state[0]=='a') &&  ( state[len-1]=='a') )						  for (int i=1;i<len-1;i=i+2)								if ( ( state=='b') &&  ( state[i+1]=='c') )								 bc=bc+2;								 if( bc==len-2)						 cout<< "is is Found Gramer" ;						 else						  cout<< "is is not Found Gramer" ;					 return(0);}

 

واذا تقصد شرح على الموضوع فالروابط كثر فقط ابحث في google

 

حمل الكود من المرفقات

 

مدونتي

http://hussienahmmed.blogspot.com/

 

pharse word gramer.txt

Gramer a(bc)^i a.txt

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#5
 
 
CTRL + Q to Enable/Disable GoPhoto.it

يعطيك العافية حسين .

 

بوضح السؤال اكثر

 

هذا السؤال :

 

عندي context free grammar

 

7iyhJ.jpg

 

 

 

وعندي مجموعة جمل :

 

GJj2R.jpg

 

 

كيف اختبر ال context free grammar عن طريق الجمل برمجيا  ..

 

 

انتظر الرد وفقكم الله

#6

مرحبا اخي اجابتك موجودة في الكود الاول

 

فقط قم ببعض التعديلات على الكود وفق القاعدة الجديدة التي تخصك

 

اي فقط اضف القاعدة التي تخصك في الجزء الاخير من الكود

وقم باضافة الكلمات الى قاعدة البيانات

 

 

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

S-->s.n V.phase

V.phase-->V P

 

  تعرف عليها

 

مثال1:

she asked him

 

post-243277-0-75694500-1367093174_thumb.

 

مثال2: لو ادخلنا جملة اخرى على نفس القاعدة

he killed here

post-243277-0-35985600-1367093561_thumb.

 

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

 

مدونتي

http://hussienahmmed.blogspot.com/

تم تعديل هذه المشاركة بواسطة حسين احمد طالب في 27 أبريل 2013 في 23:28

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#7

يعطيك العافية اخوي حسين

 

النص الي بأختبره بالعربي ؟ عندما اكتب بالعربي يعطيني ؟؟؟؟؟؟

 

انتظر ردك وفقك الله

#8

يمكنك استخدام برنامج JFLAP للتحقق من الـ Grammar و سيسعادك هو في بناء الـ Parser بأكثر من نوع.

 

الـ Grammar المحدد غير كافي حيث انت لم تحدد أبجدية اللغه و ايضا لم تحدد كيفية التفرقة بين الفعل V و الإسم N.

 

تحديد كيفية التفرقة بين عناصر الـ Grammar ستسهل عليك كثيرا فى كتابة الـ Lexer و الـ Parser. حيث ان أبجدية اللغه هي اللغه العربية من الأفضل لك عند كتابة الكود أستخدام UTF-16 لتسهيل عملية البرمجة.

 

 

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 29 أبريل 2013 في 01:24

مدونتي: C++ Tips and Tricks

#9

ماهي طريقة استخدام  برنامج JFLAP

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