• 大小: 365KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: C/C++  

资源简介

一个c语言编译器源码,由C语言编写。能成功编译自身。是学习编译器开发的好资源。

资源截图

代码片段和文件信息

#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个文件信息

评论

共有 条评论