بحووووور
08-05-2007, 12:11 AM
السلاااام عليكم أخواني واخواتي .....
ارجوا انكم تساعدني
أنا عندي مشروع تصميم لغة ..ولله الحمد كتبت قواعده لكن الي باقي علي كتابتة بلغة السي بلس بلس وهناك عدة طلبات لم استطع حلها فاأرجوا من الله ثم
منكم أنك تجاوبني عليها....
بالأول راح اكتبلكم القواعد وشكل التعليمة المدخلةوهي كالتالي:
FACT NAME(5,?S);//التعليمة
cs337 pgm-><facts><rules>//بداية القواعد
<FACTS>-><FACT><FACTS>|<FACTS>//دوران للحقائق
<FACTS>->FACT<PREDICATE>//لابد ان يدخل كلمة (فاكت)وبعدها يقدر يدخل يشوف طلبات الفاكت وهي الشروط التابعه لان (فاكت)كلمة محجوزة
<PREDICATE>->[NOT]<NAME>(<ARGUMENT>**,<ARGUMENT>})
<NAME>->(<ALPHA><NAME>)+10|<ALPHA>//اي أن عدد الاحرف المدخلة للأسم لا تتعدى عشرة احرف
<ALPHA>->(A|B|C.......|Z)
<ARGUMENT>-><CONSTANT>|<VAR>//اما ثوابت اومتغيرات
<CONSTANT>-><NUM>|<NAME>//اما ارقام او اسماء
<NUM>->(1|2|3......)+10//عدد الارقام عشرة فقط
<VAR><SYMPOLL>(<ALPHA>)//قبلها علامة استفهام ليعرف انها متغير وليس ثابت
<SYMPOLL>->"?"
وهذاء طول الله في عمركم كل البرنامج
بلأول راح اكتبلك شكتبت في ال MAIN
VOID MAIN()
**
INT X;//لتصريح عن متغير لاضع فية الكلمة المحجوزة (فاكت)
FOR(INT I=0;I<5;I++)//دوران لادخال الكلمة المحجوزة
CIN>>X;
X=STRCMP(X,FACT)//لمقارنة كل حرف مع الكلمة المحجوزة
IF(X==1)اذا صحيح ضع مسافه بعدين نادي على دالة الاسم
COUT<<\T;
NAME()
الحين كتبت كل البرنامج
} #include<iostream.h>
#include<string.h>
#include<stdlib.h>
void name();
void arg();
void var();
void cons();
int i=0;
char x[30];
void main()
**
int n;
for(i=0;i<30;i++)
**
for(i=0;i<4;i++)
**
cin>>x[i];
n=strcmp(x[i],'FACT');
if(n==1)
name();
else
cout<<"error";
}
}
}
void name()
**
for(i=5;i<15;i++)
**
int getc(x[i]);
int isalpha(x[i]);
if(x[i]=='(')
arg();
else
cout<<"error";
}
}
void arg()
**
cin>>x[i];
if(x[i]=='?')
var();
else
cons();
}
void var()
**
cin>>x[i];
int isalpha(x[i]);
}
void cons()
**
int isalpha;
for(i=16;i<25;i++)
**
cin>>x[i];
if(x[i]==isalpha)
name();
else
int isdigit(x[i]);
}
}
لكن المشكلة طلعتلي لما جيت اكتب البرنامج بلغة السي بلس بلس وهو اني
ابي دالة تقيس لي طول السلسلة المدخلة ككل عشان اقدر اقوول اذا لقيت في الخانة السادسة عشر مثلا فتحت قوس اذهب واستدعي دالة الاسم اوالرقم او المتغير او الثوابت
وايضا كل دالة تنادي الدالة الي بعدها بعد ماتوفي شروطها
وهناك ايضا شي اخر.. يريد دالة مقارنة..مقارنة هل المدخل حروف او ارقام ومااعرف شلوون اكتبها شلوون بالضبط
الحين البرنامج كلة موجود وياليت تساعدوني وتصححون لي لانة طلع لي غلط وانو يقول في دالة المين بالنسبة لستركمب انو مااقدر اقارن بين حرف وحرف ثابت
فالله يجزاكم خير اذا تقدرون تساعدني في كتابة البرنامج الله يوفقكم ساعدوني لانة لازم اقدمة بعد بكرة..
ارجوا انكم تساعدني
أنا عندي مشروع تصميم لغة ..ولله الحمد كتبت قواعده لكن الي باقي علي كتابتة بلغة السي بلس بلس وهناك عدة طلبات لم استطع حلها فاأرجوا من الله ثم
منكم أنك تجاوبني عليها....
بالأول راح اكتبلكم القواعد وشكل التعليمة المدخلةوهي كالتالي:
FACT NAME(5,?S);//التعليمة
cs337 pgm-><facts><rules>//بداية القواعد
<FACTS>-><FACT><FACTS>|<FACTS>//دوران للحقائق
<FACTS>->FACT<PREDICATE>//لابد ان يدخل كلمة (فاكت)وبعدها يقدر يدخل يشوف طلبات الفاكت وهي الشروط التابعه لان (فاكت)كلمة محجوزة
<PREDICATE>->[NOT]<NAME>(<ARGUMENT>**,<ARGUMENT>})
<NAME>->(<ALPHA><NAME>)+10|<ALPHA>//اي أن عدد الاحرف المدخلة للأسم لا تتعدى عشرة احرف
<ALPHA>->(A|B|C.......|Z)
<ARGUMENT>-><CONSTANT>|<VAR>//اما ثوابت اومتغيرات
<CONSTANT>-><NUM>|<NAME>//اما ارقام او اسماء
<NUM>->(1|2|3......)+10//عدد الارقام عشرة فقط
<VAR><SYMPOLL>(<ALPHA>)//قبلها علامة استفهام ليعرف انها متغير وليس ثابت
<SYMPOLL>->"?"
وهذاء طول الله في عمركم كل البرنامج
بلأول راح اكتبلك شكتبت في ال MAIN
VOID MAIN()
**
INT X;//لتصريح عن متغير لاضع فية الكلمة المحجوزة (فاكت)
FOR(INT I=0;I<5;I++)//دوران لادخال الكلمة المحجوزة
CIN>>X;
X=STRCMP(X,FACT)//لمقارنة كل حرف مع الكلمة المحجوزة
IF(X==1)اذا صحيح ضع مسافه بعدين نادي على دالة الاسم
COUT<<\T;
NAME()
الحين كتبت كل البرنامج
} #include<iostream.h>
#include<string.h>
#include<stdlib.h>
void name();
void arg();
void var();
void cons();
int i=0;
char x[30];
void main()
**
int n;
for(i=0;i<30;i++)
**
for(i=0;i<4;i++)
**
cin>>x[i];
n=strcmp(x[i],'FACT');
if(n==1)
name();
else
cout<<"error";
}
}
}
void name()
**
for(i=5;i<15;i++)
**
int getc(x[i]);
int isalpha(x[i]);
if(x[i]=='(')
arg();
else
cout<<"error";
}
}
void arg()
**
cin>>x[i];
if(x[i]=='?')
var();
else
cons();
}
void var()
**
cin>>x[i];
int isalpha(x[i]);
}
void cons()
**
int isalpha;
for(i=16;i<25;i++)
**
cin>>x[i];
if(x[i]==isalpha)
name();
else
int isdigit(x[i]);
}
}
لكن المشكلة طلعتلي لما جيت اكتب البرنامج بلغة السي بلس بلس وهو اني
ابي دالة تقيس لي طول السلسلة المدخلة ككل عشان اقدر اقوول اذا لقيت في الخانة السادسة عشر مثلا فتحت قوس اذهب واستدعي دالة الاسم اوالرقم او المتغير او الثوابت
وايضا كل دالة تنادي الدالة الي بعدها بعد ماتوفي شروطها
وهناك ايضا شي اخر.. يريد دالة مقارنة..مقارنة هل المدخل حروف او ارقام ومااعرف شلوون اكتبها شلوون بالضبط
الحين البرنامج كلة موجود وياليت تساعدوني وتصححون لي لانة طلع لي غلط وانو يقول في دالة المين بالنسبة لستركمب انو مااقدر اقارن بين حرف وحرف ثابت
فالله يجزاكم خير اذا تقدرون تساعدني في كتابة البرنامج الله يوفقكم ساعدوني لانة لازم اقدمة بعد بكرة..