السلام عليكم
انا ضيف في قسم السي من قسم الjava se
لهذا اتمنى ان تحسنو ضيافتى ![]()
اريد بعض الدروس بلعربي او الامثلة واضحة عن الادات bison
لانى قرات عنها بي الغات الاجنبية و فهمت منها الكثير
لكن لا زالت الصورة مشوشة عندى بعض الشىء
السلام عليكم
انا ضيف في قسم السي من قسم الjava se
لهذا اتمنى ان تحسنو ضيافتى ![]()
اريد بعض الدروس بلعربي او الامثلة واضحة عن الادات bison
لانى قرات عنها بي الغات الاجنبية و فهمت منها الكثير
لكن لا زالت الصورة مشوشة عندى بعض الشىء
تم تعديل هذه المشاركة بواسطة sahraoui17 في 7 فبراير 2012 في 16:12
مرحبا بك في بيتك أخي صحراوي :D
للأسف لا أملك الإجابة و لكن كلي أمل أن تجد من يرشدك :)
تحياتي.
شكرا خالد
khaled_prg كتب:مرحبا بك في بيتك أخي صحراوي :D
للأسف لا أملك الإجابة و لكن كلي أمل أن تجد من يرشدك :)
تحياتي.
شكرا
لكن من المفروض انك تعاملت معها سابقا "في موديل compilation"
يا جماعة اي احد يعرف bison
اريد ان اسال سوال بسيط
اريد ان برنامج بي 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
السلام عليكم و رحمة الله ..
أخي 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 : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر
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
السلام عليكم و رحمة الله ..
لا أخي .. بل استخدم cygwin على ويندوز . حيث قمت بتحميل bison و ترجمته و تحويله غلى exe ..و تمكنت من تطبيق مثال الآلة الحاسبة , تمت ترجمته بنجاح , لكن فقط بملف واحد .y ..اقتباسيبد انك تشتغل على linux
و بالنسبة لــ jflex فلا معلومات لدي للأسف ...
بالتوفيق ..
لا إله إلا الله ... محمد رسول الله
لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة
المعرًف القديم : houssam11350_11350
من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر
houssam11350_11350 كتب:السلام عليكم و رحمة الله ..
لا أخي .. بل استخدم cygwin على ويندوز . حيث قمت بتحميل bison و ترجمته و تحويله غلى exe ..و تمكنت من تطبيق مثال الآلة الحاسبة , تمت ترجمته بنجاح , لكن فقط بملف واحد .y ..
و بالنسبة لــ jflex فلا معلومات لدي للأسف ...
بالتوفيق ..
جميل جدا
رائع
هل لك ان تمدنى ببعض الدروس عن هذا الاصدار
و اذا تكرمت بعض الشرح
خاصة و انك جيد في الشرح
هذه ليست مجاملة
لانك سبق و ان ساعدتنى في grapht اذا تتذكر
و لقد اعطيتني دفعت قوية
بعدها استطعت فهم المكتبة و وجدت انها توفر عدت خورزميات مثل "dijkestra and floyed and kruskal and clique and bellman.........."
و قد قمت بصنع واجهة لهذه الخورزميات
و الفضل يعود لك
السلام عليكم و رحمة الله ..
شكرا اخي .. بارك الله بك ... هذا من فضل الله ... لكن بالنسبة للــ bison و flex للأسف معلوماتي فقط نظرية و لم أتعامل معهما بشكل عملي , و لكن فكرتهما تشبه كثيرا الــ Rule-base Expert System .. الذي نكتبه بالــ Prolog ... مجموعة من الــ facts و الــ rules ..اقتباسجميل جدارائع
هل لك ان تمدنى ببعض الدروس عن هذا الاصدار
و اذا تكرمت بعض الشرح
خاصة و انك جيد في الشرح
هذه ليست مجاملة
لانك سبق و ان ساعدتنى في grapht اذا تتذكر
و لقد اعطيتني دفعت قوية
بعدها استطعت فهم المكتبة و وجدت انها توفر عدت خورزميات مثل "dijkestra and floyed and kruskal and clique and bellman.........."
و قد قمت بصنع واجهة لهذه الخورزميات
و الفضل يعود لك
لكن يمكن الاعتماد على المرجعيين :
حيث يوضحان بنية ملف الــ bison : أربعة أقسام .C Declaration و Bison declaration و bison Grammar rules و Additional C Code
و كذلك ملف الــ Lex .. و كيفية ترجمتها و تحويلهما إلى exe ...
بالتوفيق ..
لا إله إلا الله ... محمد رسول الله
لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة
المعرًف القديم : houssam11350_11350
من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر