العودة   منتديات حاسبكو المتخصصة بمادة الحاسب الآلي > حاسبكو الأعضاء > الأرشـــــــــيــــــــــــف

الملاحظات

الأرشـــــــــيــــــــــــف هذا القسم مخصص لكل المواضيع المكررة والمغلقه والتي سوف تحذف لاحقاً أو القديمه الروابط

إضافة رد
 
أدوات الموضوع انواع عرض الموضوع
قديم 12-31-2007, 08:12 AM   #1
اسيرة الصمت
حاسبكو جديد
 
الصورة الرمزية اسيرة الصمت
افتراضي عندنا مشروع بمادة الكومبايلر

السلام عليكم
كل عام وانت بعافية..
أرجو مساعدتكم ....
عندنا مشروع بمادة الكومبايلر
وهو عبارة عن برنامج بلغة السي يحول من انفكس إلى بوست فكس
البرنامج موجود ومكتوب بسبع أو ثمان ملفات
المطلوب كيف أربط بينها حتى يتنفذ أرجو ان تعطوني الخطوات حتى انفذه بنفسي وبأسرع وقت وجزاكم الله خيرا
وهذه هي الملفات مع ملاحظة كل دالة وضعت بجانبها تعيق فهي في ملف مستقل
#include <stdio.h>
#include <ctype.h>
#include<string.h>
#define BSIZE 128
#define NONE -1
#define EOS '\0'
#define NUM 256
#define DIV 257
#define MOD 258
#define ID 259
#define DONE 260
int tokenval;
int lineno;
struct entry {
char*lexptr;
int token;
};
struct entry symtable[];
void error(char *m);
int lookup(char s[]);
int insert(char s[],int tok);
int lexan();
int expr();
void match(int t);
void init();
void term();
void emit(int t,int tval);
struct entry symtable[];
void factor();
void parse();
//***************************lexer.c/
#include "global.h"
char lexbuf[BSIZE];
int lineno=1;
int tokenval=NONE;
int lexan()
{
int t;
while(1){
t=getchar();
if(t==' '||t=='\t')
;
else if (t=='\n')
lineno=lineno+1;
else if (isdigit(t)){
ungetc(t,stdin);
scanf("%d",&tokenval);
return NUM;
}
else if (isalpha(t)){
int p,b=0;
while (isalnum(t)){
lexbuf[b]=t;
t=getchar();
b=b+1;
if (b>=BSIZE)
error("compiler error");
}
lexbuf[b]=EOS;
if (t!=EOF)
ungetc(t,stdin);
p=lookup(lexbuf);
if (p==0)
p=insert(lexbuf,ID);
tokenval=p;
return symtable[p].token;
}
else if (t==EOF)
return DONE;
else {
tokenval=NONE;
return t;
}
}
}
//**************parser
#include "global.h"
int lookahead;
void parse()
{
lookahead=lexan();
while (lookahead!=DONE){
expr();match(';');
}
}
int expr()
{
int t;
term();
while(1)
switch(lookahead){
case '+':case '-':
t=lookahead;
match(lookahead); term(); emit(t,NONE);
continue;
default:
return 0;
}
}
void term()
{
int t;
factor();
while(1)
switch(lookahead){
case'*':case'/':case DIV:case MOD:
t=lookahead;
match(lookahead);factor(); emit(t,NONE);
continue;
default:
return ;
}
}
void factor()//*******************
{
switch(lookahead) {
case'(':
match('('); expr(); match(')');break;
case NUM:
emit(NUM,tokenval);match(NUM);break;
case ID:
emit(ID,tokenval);match(ID);break;
default:
error("syntax error");
}
}
void match(t)
int t;
{
if (lookahead==t)
lookahead=lexan();
else error("syntax error");
}
//*************emitter
#include "global.h"
void emit(t,tval)
int t,tval;
{
switch(t){
case'+':
case'-':
case'*':
case'/':
printf ("%c\n",t);break;
case DIV:
printf("DIV\n");break;
case MOD:
printf ("MOD\n");break;
case NUM:
printf ("%d\n",tval);break;
case ID:
printf ("%s\n",symtable[tval].lexptr);break;
default:
printf("token %d,tokenval %d\n",t,tval);
}
}
//********symbol.c
#include "global.h"
#define STRMAX 999
#define SYMMAX 100
char lexemes [STRMAX];
int lastchar=-1;
struct entry symtable[SYMMAX];
int lastentry=0;
int lookup(s)
char s[];
{
int p;
for (p=lastentry;p>0;p=p-1)
if (strcmp(symtable[p].lexptr,s)==0)
return p;
return 0;
}
int insert (s,tok)
char s[];
int tok;
{
int len;
len = strlen(s);
if (lastentry+1>=SYMMAX)
error("symbol table full");
if(lastchar+len+1>=STRMAX)
error("lexemes array full");
lastentry=lastentry+1;
symtable[lastentry].token=tok;
symtable[lastentry].lexptr=&lexemes[lastchar+1];
lastchar=lastchar+len+1;
strcpy(symtable[lastentry].lexptr,s);
return lastentry;
}
//***********init.c
#include "global.h"
struct entry keywords[]={
"div",DIV,
"mod",MOD,
0, 0
};
void init()
{
struct entry*p;
for(p=keywords;p->token;p++)
insert(p->lexptr,p->token);
}




//*********main
#include "global.h"
main()
{
init();
parse();
exit(0);
}
  رد مع اقتباس
قديم 12-31-2007, 03:21 PM   #2
عضو شرف
 
الصورة الرمزية stn555
افتراضي مشاركة: عندنا مشروع بمادة الكومبايلر

متأسف ليس لدى خبرة حول هذا الموضوع ...............
التوقيع :
  رد مع اقتباس
إضافة رد


يتصفح الموضوع حالياً : 1 (0 عضو و 1 ضيف)
 

ضوابط المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع


الساعة الآن 10:01 PM.





Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Trans by
جميع الحقوق محفوظة لدى موقع ومنتديات حاسبكو 1431هـ/1432هـ

a.d - i.s.s.w