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

طلب دروس flex and bison

بدأه sahraoui dhelim في 7 فبراير 2012 · 10 رد · 2,242 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا ضيف في قسم السي من قسم الjava se

لهذا اتمنى ان تحسنو ضيافتى smile.gif

اريد بعض الدروس بلعربي او الامثلة واضحة عن الادات bison

لانى قرات عنها بي الغات الاجنبية و فهمت منها الكثير

لكن لا زالت الصورة مشوشة عندى بعض الشىء

تم تعديل هذه المشاركة بواسطة sahraoui17 في 7 فبراير 2012 في 16:12

#3

شكرا خالد

khaled_prg كتب:

مرحبا بك في بيتك أخي صحراوي :D

للأسف لا أملك الإجابة و لكن كلي أمل أن تجد من يرشدك :)

تحياتي.

شكرا

لكن من المفروض انك تعاملت معها سابقا "في موديل compilation"

#4

يا جماعة اي احد يعرف bison

اريد ان اسال سوال بسيط

#5

ضع سؤالك مباشر اكيد اﻻعضاء سوف يطلعون علية ويوجهونك الى اﻻجابة ان شاء الله ... .

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#6

اريد ان برنامج بي bison يتعرف على التعليمت switch في c

من هذا الشكل

switch ( <variable> )
{ case <constant> : <instruction>; [break;]
  case <constant> : <instruction>; [break;]
	.
	.
  [default : <instruction>;]
}

مع العلم ان العارضتين [] يعني ان الجملة اختيارية

و مع العلم ايضا ان التعليمة التى داخل instruction هي تعليمة بسيطة من سطر واحد من هذا الشكل x=5; او y=p+4 و هكذا

مثال عن اللغة المطلوبة

switch ( x )
{ case 0  : y=1; 	break;
  case 1  : y=2+x;   
  case 3  : z=x+y;   break;
  default : z=0;
}

هذا هو العمل المطلوب

و هذه محاولتي

هذا المستند switch.l

%{
#define YYSTYPE double
#include "switch.tab.h"
#include <stdlib.h>
%}

white [ \t\n]+
CH   		[0-9]
LE   		[a-zA-Z_]
ident    	{LE}({CH}|{LE})*
pointavant	{CH}*"."?{CH}+
pointapres	{CH}+"."?{CH}*  
nombre    	{pointavant}|{pointapres}
constant  	{CH}+


%%

{white} { }


"switch" 	return SWITCH;

"break"  	return BREAK;

"case"  	return CASE;

"default"   return DEFAULT;


"+" return PLUS;
"-" return MINUS;
"*" return TIMES;
"/" return DIVIDE;
"(" return PO;
")" return PF;
"{"      	return EO;
"}" 		return  EF;
":"      	return PP;
";"      	return PV;
"="      	return AFFICTATION;

{ident} 	return IDENT;

{constant}   { yylval=atof(yytext); return CONSTANT;}

{nombre}  { yylval=atof(yytext);  return NUMBER;}


%%
#include "switch.tab.c"

و هذا المستند switch.y

%{
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define YYSTYPE double
int varswitch,bre;
%}

%token  SWITCH CASE BREAK DEFAULT 
%token  CONSTANT NUMBER  IDENT
%token  PLUS MINUS TIMES DIVIDE 
%token  PO PF EO EF PP PV AFFICTATION

%start S

%%
S : SWITCH PO IDENT { varswitch=$3; bre=0;} PF EO C Br L D EF ;

L : L C Br | C Br | ;

C : CASE CONSTANT PP IDENT AFFICTATION id_const PV {  if( (varswitch==$2)&&(bre==0) ){printf("cette instruction sera executer %d = %d ",$4,$6);}  	}
   | CASE CONSTANT PP IDENT AFFICTATION id_const PLUS id_const  PV {  if( (varswitch==$2)&&(bre==0) ){printf("cette instruction sera executer %d = %d + %d ",$4,$6,$8);}  	}
   | CASE CONSTANT PP IDENT AFFICTATION id_const MINUS id_const  PV {  if( (varswitch==$2)&&(bre==0) ){printf("cette instruction sera executer %d = %d - %d ",$4,$6,$8);}  	}
   | CASE CONSTANT PP IDENT AFFICTATION id_const TIMES id_const  PV {  if( (varswitch==$2)&&(bre==0) ){printf("cette instruction sera executer %d = %d * %d ",$4,$6,$8);} }
   | CASE CONSTANT PP IDENT AFFICTATION id_const DIVIDE id_const  PV  {  if( (varswitch==$2)&&(bre==0) ){printf("cette instruction sera executer %d = %d / %d ",$4,$6,$8);} } 
 ;

Br : BREAK PV {bre=1;}| ;

D : DEFAULT  PP IDENT AFFICTATION id_const PV  {  if( bre==0 ){printf("cette instruction sera executer %d = %d ",$3,$5);} }
   | DEFAULT PP IDENT AFFICTATION id_const MINUS id_const  PV  {  if( bre==0 ){printf("cette instruction sera executer %d = %d - %d ",$3,$5,$7);}  	}
   | DEFAULT PP IDENT AFFICTATION id_const PLUS id_const  PV  {  if( bre==0 ){printf("cette instruction sera executer %d = %d + %d ",$3,$5,$7);}  	}
   | DEFAULT PP IDENT AFFICTATION id_const TIMES id_const  PV   {  if( bre==0 ){printf("cette instruction sera executer %d = %d * %d ",$3,$5,$7);}  	}
   | DEFAULT PP IDENT AFFICTATION id_const DIVIDE id_const  PV   {  if( bre==0 ){printf("cette instruction sera executer %d = %d / %d ",$3,$5,$7);}  	}

| ;


id_const : IDENT | CONSTANT ;

%%

int yyerror(char *s) {
  printf("%s\n", s);
}

int main() {
  if (yyparse())
 	fprintf(stderr, "Successful parsing.\n");
  else
 	fprintf(stderr, "error found.\n");
}

انا لم اعرف اين الخطا

الرجاء المساعدة

جزاكم الله خير

تم تعديل هذه المشاركة بواسطة sahraoui17 في 8 فبراير 2012 في 10:54

#7

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

أخي sahraoui17 ..

معلوماتي قليلة جدا عن الموضوع .. لكن فقط للإفادة .. أنا استخدم bison-2.5 و لكن لم أعرف ما هو الأمر المطوب للتنفيذ ..

عندما استخدمنا : bison switch.y ظهرت رسالة تقول switch.y: conflicts: 1 shift/reduce .. و عند البحث عن هذه الرسالة .. تبين أنه على ما يبدو هناك تعرض .. و عند استخدام bison switch.y -r state يقوم بتوليد ملف switch.output يقول فيه State 13 conflicts: 1 shift/reduce و داخل الملف يوجد

state 13

	2 S: SWITCH PO IDENT $@1 PF EO C Br . L D EF

	CASE  shift, and go to state 9

	CASE  	[reduce using rule 5 (L)]
	$default  reduce using rule 5 (L)

	L  go to state 16
	C  go to state 17

سؤالي ما الهدف من الملف switch.l علما انني عندما حاولت بالأمر bison switch.l ظهرت رسالة syntax error , unexpected identifier

..

هل هذا ما ظهر معك أم ماذا ...

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

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

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

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

#8
houssam11350_11350 كتب:

. لكن فقط للإفادة .. أنا استخدم bison-2.5

يبد انك تشتغل على linux

ان اعمل على windows

houssam11350_11350 كتب:

و لكن لم أعرف ما هو الأمر المطوب للتنفيذ ..

المطلوب عمل L'analyseur syntaxique بي ال bison لي التعليمة switch مع العلم ان الblock الذي تنفذه كل case مجرد تعليمت بسيطة "اقرا ردي السابق"

houssam11350_11350 كتب:

سؤالي ما الهدف من الملف switch.l علما انني عندما حاولت بالأمر bison switch.l ظهرت رسالة syntax error , unexpected identifier

المستند switch.l يمثل ال lexical analyser و هو مكتوب بي flex

اي ان switch.l خاص بي flex

اي يتعرف على ال token و يرسلها لي bison

houssam11350_11350 كتب:

هل هذا ما ظهر معك أم ماذا ...

لا

ان اشتغل معى تمام

مع انه حصل معى مثل ما حصل معك

يقل لي conflicts: 1 shift/reduce

ثم ينشى مستند لغة c

و عندم اشغله يخرج المستند التطبيقي .exe

لكن عندى خطاء في token لي اسمو IDENT

كما قلت لك سابقا المطلوب عمل L'analyseur syntaxique بي ال bison لي التعليمة switch

اريد عملها باي طريق كانت

سواء اشتغل و لم يشتغل فشكرا اخ حسام على اهتمامك بلموضوع

سوال اخر

هل لديك معرفة بي jflex او ما يقابل bison في الjava

تم تعديل هذه المشاركة بواسطة sahraoui17 في 8 فبراير 2012 في 17:42

#9

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

اقتباس
يبد انك تشتغل على linux
لا أخي .. بل استخدم cygwin على ويندوز . حيث قمت بتحميل bison و ترجمته و تحويله غلى exe ..و تمكنت من تطبيق مثال الآلة الحاسبة , تمت ترجمته بنجاح , لكن فقط بملف واحد .y ..

و بالنسبة لــ jflex فلا معلومات لدي للأسف ...

بالتوفيق ..

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

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

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

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

#10
houssam11350_11350 كتب:

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

لا أخي .. بل استخدم cygwin على ويندوز . حيث قمت بتحميل bison و ترجمته و تحويله غلى exe ..و تمكنت من تطبيق مثال الآلة الحاسبة , تمت ترجمته بنجاح , لكن فقط بملف واحد .y ..

و بالنسبة لــ jflex فلا معلومات لدي للأسف ...

بالتوفيق ..

جميل جدا

رائع

هل لك ان تمدنى ببعض الدروس عن هذا الاصدار

و اذا تكرمت بعض الشرح

خاصة و انك جيد في الشرح

هذه ليست مجاملة

لانك سبق و ان ساعدتنى في grapht اذا تتذكر

و لقد اعطيتني دفعت قوية

بعدها استطعت فهم المكتبة و وجدت انها توفر عدت خورزميات مثل "dijkestra and floyed and kruskal and clique and bellman.........."

و قد قمت بصنع واجهة لهذه الخورزميات

و الفضل يعود لك

#11

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

اقتباس
جميل جدا

رائع

هل لك ان تمدنى ببعض الدروس عن هذا الاصدار

و اذا تكرمت بعض الشرح

خاصة و انك جيد في الشرح

هذه ليست مجاملة

لانك سبق و ان ساعدتنى في grapht اذا تتذكر

و لقد اعطيتني دفعت قوية

بعدها استطعت فهم المكتبة و وجدت انها توفر عدت خورزميات مثل "dijkestra and floyed and kruskal and clique and bellman.........."

و قد قمت بصنع واجهة لهذه الخورزميات

و الفضل يعود لك

شكرا اخي .. بارك الله بك ... هذا من فضل الله ... لكن بالنسبة للــ bison و flex للأسف معلوماتي فقط نظرية و لم أتعامل معهما بشكل عملي , و لكن فكرتهما تشبه كثيرا الــ Rule-base Expert System .. الذي نكتبه بالــ Prolog ... مجموعة من الــ facts و الــ rules ..

لكن يمكن الاعتماد على المرجعيين :

حيث يوضحان بنية ملف الــ bison : أربعة أقسام .C Declaration و Bison declaration و bison Grammar rules و Additional C Code

و كذلك ملف الــ Lex .. و كيفية ترجمتها و تحويلهما إلى exe ...

بالتوفيق ..

1

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

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

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

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

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