資源簡介
一個c語言編譯器源碼,由C語言編寫。能成功編譯自身。是學(xué)習(xí)編譯器開發(fā)的好資源。

代碼片段和文件信息
#include?
#include?
#include?
#include?“ucc.h“
#define?_P_WAIT?0
#define?UCCDIR?“/usr/local/lib/ucc/“
static?char?*CPPProg[]?=?
{?
“/usr/bin/gcc“?“-U__GNUC__“?“-D_POSIX_SOURCE“?“-D__STRICT_ANSI__“
“-Dunix“?“-Di386“?“-Dlinux“?“-D__unix__“?“-D__i386__“?“-D__linux__“?
“-D__signed__=signed“?“-D_UCC“?“-I“?UCCDIR?“include“?“$1“?“-E“?“$2“?“-o“?“$3“?0?
};
static?char?*CCProg[]?=?
{
UCCDIR?“ucl“?“-ext:.s“?“$1“?“$2“?0?
};
static?char?*ASProg[]?=?
{?
“/usr/bin/as“?“-o“?“$3“?“$1“?“$2“?0?
};
static?char?*LDProg[]?=?
{
“/usr/bin/gcc“?“-o“?“$3“?“$1“?“$2“?UCCDIR?“assert.o“?“-lc“?“-lm“?0?
};
char?*ExtNames[]?=?{?“.c“?“.i“?“.s“?“.o“?“.a;.so“?0?};
static?int?Execute(char?**cmd)
{
int?pid?n?status;
pid?=?fork();
if?(pid?==?-1)
{
fprintf(stderr?“no?more?processes\n“);
return?100;
}
else?if?(pid?==?0)
{
execv(cmd[0]?cmd);
perror(cmd[0]);
fflush(stdout);
exit(100);
}
while?((n?=?wait(&status))?!=?pid?&&?n?!=?-1)
;
if?(n?==?-1)
status?=?-1;
if?(status?&?0xff)
{
fprintf(stderr?“fatal?error?in?%s\n“?cmd[0]);
status?|=?0x100;
}
return?(status?>>?8)?&?0xff;
}
void?SetupToolChain(void)
{
}
int?InvokeProgram(int?oftype)
{
List?p?il?ol;
char?*ofname;
char?**cmd;
int?status?=?0;
switch?(oftype)
{
case?PP_FILE:
for?(p?=?Option.cfiles;?p?!=?NULL;?p?=?p->next)
{
ofname?=?FileName(p->str?“.i“);
PPFiles?=?ListAppend(PPFiles?ofname);
il?=?ListAppend(NULL?p->str);
ol?=?ListAppend(NULL?ofname);
cmd?=?BuildCommand(CPPProg?Option.pflags?il?ol);
status?=?Execute(cmd);
}
Option.pfiles?=?ListCombine(Option.pfiles?PPFiles);
break;
case?ASM_FILE:
if?(Option.pfiles?==?NULL)
return?0;
for?(p?=?Option.aflags?Option.aflags?=?NULL;?p?!=?NULL;?p?=?p->next)
{
Option.aflags?=?ListCombine(Option.aflags?ParseOption(p->str?+?4));
}
for?(p?=?Option.pfiles;?p?!=?NULL;?p?=?p->next)
{
ASMFiles?=?ListAppend(ASMFiles?FileName(p->str?“.s“));
}
Option.afiles?=?ListCombine(Option.afiles?ASMFiles);
cmd?=?BuildCommand(CCProg?Option.cflags?Option.pfiles?ASMFiles);
status?=?Execute(cmd);
break;
case?OBJ_FILE:
for?(p?=?Option.afiles;?p?!=?NULL;?p?=?p->next)
{
ofname?=?FileName(p->str?“.o“);
OBJFiles?=?ListAppend(OBJFiles?ofname);
il?=?ListAppend(NULL?p->str);
ol?=?ListAppend(NULL?ofname);
cmd?=?BuildCommand(ASProg?Option.aflags?il?ol);
status?=?Execute(cmd);
}
Option.ofiles?=?ListCombine(Option.ofiles?OBJFiles);
break;
case?LIB_FILE:
return?0;
case?EXE_FILE:
if?(Option.ofiles?==?NULL)
return?0;
if?(Option.out?==?NULL)
Option.out?=?“a.out“;
cmd?=?BuildCommand(LDProg?Option.lflags?Option.linput?ListAppend(NULL?Option.out));
status?=?Execute(cmd);
break;
}
return?status;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????463??2008-06-16?14:36??ucc162\ucc\ChangeLog
?????文件?????????69??2008-11-21?18:22??ucc162\ucc\COPYRIGHT
?????文件????????162??2008-11-10?16:16??ucc162\ucc\COPYRIGHT~
?????文件?????227013??2008-05-14?11:13??ucc162\ucc\doc\UC?Internal(chn).pdf
?????文件?????137607??2008-05-14?11:13??ucc162\ucc\doc\UCC?Internal.pdf
?????文件???????4319??2008-05-14?11:13??ucc162\ucc\doc\UCC?User?Manual(chn).txt
?????文件???????5938??2008-05-14?11:13??ucc162\ucc\doc\UCC?User?Manual.txt
?????文件???????2955??2008-05-14?11:13??ucc162\ucc\driver\linux.c
?????文件????????115??2008-05-14?11:13??ucc162\ucc\driver\Makefile
?????文件????????175??2008-05-14?11:13??ucc162\ucc\driver\Makefile.win
?????文件???????7261??2008-05-14?11:13??ucc162\ucc\driver\ucc.c
?????文件????????845??2008-05-14?11:13??ucc162\ucc\driver\ucc.h
?????文件???????3274??2008-05-14?11:13??ucc162\ucc\driver\win32.c
?????文件??????17719??2007-08-28?22:31??ucc162\ucc\GPL.txt
?????文件????????292??2008-05-14?11:13??ucc162\ucc\Makefile
?????文件????????385??2008-05-14?11:13??ucc162\ucc\Makefile.win
?????文件????????157??2008-05-14?11:13??ucc162\ucc\REAMDE.txt
?????文件???????1822??2008-06-06?10:07??ucc162\ucc\ucl\alloc.c
?????文件????????577??2008-05-14?11:12??ucc162\ucc\ucl\alloc.h
?????文件????????389??2008-06-10?14:46??ucc162\ucc\ucl\assert.c
?????文件???????1223??2008-06-10?14:46??ucc162\ucc\ucl\ast.c
?????文件???????2570??2008-05-14?11:12??ucc162\ucc\ucl\ast.h
?????文件????????417??2008-05-14?11:12??ucc162\ucc\ucl\config.h
?????文件??????22643??2008-06-06?13:46??ucc162\ucc\ucl\decl.c
?????文件???????3209??2008-05-14?11:12??ucc162\ucc\ucl\decl.h
?????文件??????29697??2008-06-06?13:52??ucc162\ucc\ucl\declchk.c
?????文件???????8037??2008-05-14?11:12??ucc162\ucc\ucl\dumpast.c
?????文件???????3672??2008-06-06?14:34??ucc162\ucc\ucl\emit.c
?????文件????????812??2008-05-14?11:12??ucc162\ucc\ucl\error.c
?????文件????????196??2008-05-14?11:12??ucc162\ucc\ucl\error.h
............此處省略62個文件信息
評論
共有 條評論