亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cmain.c

?? 本程序集是Allen I. Holub所寫的《Compiler Design in C》一書的附隨軟件
?? C
字號:
/*
 * 68K/386 32-bit C compiler.
 *
 * copyright (c) 1997, David Lindauer
 * 
 * This compiler is intended for educational use.  It may not be used
 * for profit without the express written consent of the author.
 *
 * It may be freely redistributed, as long as this notice remains intact
 * and either the original sources or derived sources 
 * are distributed along with any executables derived from the originals.
 *
 * The author is not responsible for any damages that may arise from use
 * of this software, either idirect or consequential.
 *
 * v1.35 March 1997
 * David Lindauer, gclind01@starbase.spd.louisville.edu
 *
 * Credits to Mathew Brandt for original K&R C compiler
 *
 */
/*
 * The following symbols must be defined on the compile command line:
 *    PROGNAME
 *    ENVNAME
 *    GLBDEFINE
 *	  SOURCEXT
 */
#include        <stdio.h>
#include				<malloc.h>
#include 				<string.h>
#include 				<setjmp.h>
#include				<signal.h>
#include				<stdlib.h>
#include				"utype.h"	
#include				"cmdline.h"	
#include        "expr.h"
#include				"errors.h"
#include        "c.h"
#include 				"diag.h"

#define VERSION 151

typedef struct list {
		struct list *link;
		void *data;
} LIST;

extern char GLBDEFINE[],SOURCEXT[],ENVNAME[],PROGNAME[];

extern ERRORS *errlist;
extern TABLE    tagtable;
extern int      total_errors;
extern int diagcount;
extern char *errfile;
extern TABLE gsyms;

FILE            *inputFile = 0, *listFile = 0, *outputFile = 0, *cppFile = 0, *errFile = 0;
int stoponerr = 0;
LIST *clist = 0;
LIST *deflist = 0;
int prm_linkreg = TRUE;
int prm_stackcheck = FALSE;
int prm_warning = TRUE;
#ifdef OBJEXT
int prm_asmfile = FALSE;
#else
int prm_asmfile = TRUE;
#endif
int prm_ansi = FALSE;
int prm_listfile = FALSE;
int prm_maxerr = 25;
int prm_diag = FALSE;
int prm_bss = TRUE;
int prm_cppfile = FALSE;
int prm_packing = FALSE;
int prm_revbits = FALSE;
int prm_lines = TRUE;
int prm_cplusplus = FALSE;
int prm_cmangle = TRUE;
int basear = 1, basedr = 1, basefr = 1;
int prm_debug = FALSE;
int version = VERSION;
int prm_errfile = FALSE;

char *prm_searchpath = 0;
jmp_buf ctrlcreturn;
int file_count = 0;

char     *infile, listfile[40],outfile[40],cppfile[40],errorfile[40];
void bool_setup(char select, char *string);
void err_setup(char select, char *string);
void incl_setup(char select, char *string);
void def_setup(char select, char *string);
void codegen_setup(char select, char *string);
void optimize_setup(char select, char *string);
void warning_setup(char select, char *string);
void parsefile(char select, char *string);

/* setup for ARGS.C */
ARGLIST ArgList[] = {
  { 'i', ARG_BOOL, bool_setup },
  { 'e', ARG_BOOL, bool_setup },
  { 'f', ARG_CONCATSTRING, parsefile },
  { 'l', ARG_BOOL, bool_setup },
#ifdef OBJEXT
  { 'v', ARG_BOOL, bool_setup },
#endif
  { 'w', ARG_CONCATSTRING, warning_setup },
  { 'A', ARG_BOOL, bool_setup },
  { 'C', ARG_CONCATSTRING, codegen_setup },
  { 'O', ARG_CONCATSTRING, optimize_setup },
  { 'E', ARG_CONCATSTRING, err_setup },
  { 'I', ARG_CONCATSTRING, incl_setup },
	{ 'D', ARG_CONCATSTRING, def_setup },
#ifdef OBJEXT
  { 'S', ARG_BOOL, bool_setup },
#endif
  { 0, 0, 0 }
};



void bool_setup(char select, char *string)
/*
 * activation routine (callback) for boolean command line arguments
 */
{
	int bool = (int)string;
	if (select == 'S')
		prm_asmfile = bool;
  if (select == 'l')
		prm_listfile = bool;
	if (select == 'i')
		prm_cppfile = bool;
	if (select == 'e')
		prm_errfile = bool;
	if (select == 'v')
		prm_debug = bool;
	if (select == 'A')
		prm_ansi = bool;
}
void codegen_setup(char select, char *string)
/*
 * activation for code-gen type command line arguments
 */
{
		int bool = TRUE;
		while (*string) {
				switch (*string) {
					case 'd':
						prm_diag = bool;
						break;
					case 'p':
						prm_packing = bool;
						break;
					case 'r':
						prm_revbits = bool;
						break;
					case 'b':
						prm_bss=bool;
						break;
					case 'l':
						prm_lines = bool;
						break;
					case 'm':
						prm_cmangle = bool;
						break;
					case 'S':
						prm_stackcheck = bool;
						break;
					case 'R':
						prm_linkreg = bool;
						break;
					case '-':
						bool = FALSE;
						break;
					case '+':
						bool = TRUE;
						break;
					default:
						if (!confcodegen(*string,bool)) 
							fatal("Illegal codegen parameter ");
				}
			string++;
		}
}
void optimize_setup(char select, char *string)
/*
 * activation for optimizer command line arguments
 */
{
		int bool = TRUE;
		while (*string) {
			switch (*string) {
				case 'R':
					string++;
					while (*string && *string != '+' && *string != '-') {
						switch (*string++) {
							case 'a':
								basear = bool;
								break;
							case 'd':
								basedr = bool;
								break;
							case 'f':
								basefr = bool;
								break;
							default:
								goto errorx;
						}
						if (!*string)
							return;
					}
					break;
				case '-':
					bool = FALSE;
					break;
				case '+':
					bool = TRUE;
					break;
				default:
errorx:
					fatal("Illegal optimizer parameter");
			}
			string++;
		}
}
void err_setup(char select, char *string)
/*
 * activation for the max errs argument
 */
{
	prm_maxerr = atoi(string);
}
void incl_setup(char select, char * string)
/*
 * activation for include paths
 */
{
	if (prm_searchpath)
		prm_searchpath = realloc(prm_searchpath,strlen(string)+strlen(prm_searchpath)+1);
	else {
		prm_searchpath = malloc(strlen(string)+1);
		prm_searchpath[0] = 0;
	}
	strcat(prm_searchpath,string);
}
void def_setup(char select, char *string)
/*
 * activation for command line #defines
 */
{
	char *s = malloc(strlen(string)+1);
	LIST *l = malloc(sizeof(LIST));
	strcpy(s,string);
	l->link = deflist;
	deflist = l;
	l->data = s;
}
void setglbdefs(void)
/*
 * function declares any global defines from the command line and also
 * declares a couple of other macros so we can tell what the compiler is
 * doing
 */
{
	LIST *l = deflist;
	while (l) {
		char *s = l->data;
		char *n = s;
		while (*s && *s != '=')
			s++;
		if (*s == '=')
			*s++=0;
		glbdefine(n,s);
		l = l->link;
	}
#ifdef CPLUSPLUS
	if (prm_cplusplus) {
		glbdefine("__cplusplus","");
	}
#endif
	glbdefine(GLBDEFINE,"");
}
void InsertAnyFile(FILE *inf, FILE *outf, char *filename, char *path, int drive)
/*
 * Insert a file name onto the list of files to process
 */

{
  char *newbuffer, buffer[100],*p = buffer;
	LIST *r = &clist;

	file_count++;

	if (drive != -1) {
		*p++ = (char)(drive + 'A');
		*p++ = ':';
	}
	if (path) {
		strcpy(p,path);
		strcat(p,"\\");
	}
	else
		*p = 0;
  /* Allocate buffer and make .C if no extension */
	strcat(buffer,filename);
  AddExt(buffer,".C");
  newbuffer = (char *) malloc(strlen(buffer) + 1);
  strcpy(newbuffer,buffer);

  /* Insert file */
	while (r->link)
		r = r->link;
	r->link = malloc(sizeof(LIST));
	r = r->link;
	r->link = 0;
	r->data = newbuffer;
}
void dumperrs(FILE *file);
void setfile(char *buf,char *orgbuf,char *ext)
/*
 * Get rid of a file path an add an extension to the file name
 */
{
	char *p = strrchr(orgbuf,'\\');
	if (!p) p = orgbuf;
	else p++;
	strcpy(buf,p);
	StripExt(buf);
	AddExt(buf,ext);
}
int parse_arbitrary(char *string)
/*
 * take a C string and and convert it to ARGC, ARGV format and then run
 * it through the argument parser
 */
{
	char *argv[40];
	int rv,i;
	int argc = 1;
	if (!string || !*string)
		return 1;
	while (1) {
		while (*string == ' ') 
			string++;
		if (!*string)
			break;
		argv[argc++] = string;
		while (*string && *string != ' ') string++;
		if (!*string)
			break;
		*string = 0;
		string++;
	}
  rv = parse_args(&argc,argv,TRUE);
  for (i= 1; i < argc; i++)
		InsertAnyFile(0,0,argv[i],0,-1);
	return rv;
}
void parsefile(char select, char *string)
/*
 * parse arguments from an input file
 */
{
	FILE *temp;
	if (!(temp = fopen(string,"r")))
		fatal("Argument file not found");
	while (!feof(temp)) {
		char buf[256];
		buf[0] = 0;
		fgets(buf,256,temp);
		if (buf[strlen(buf)-1] == '\n')
			buf[strlen(buf)-1] = 0;
		if (!parse_arbitrary(buf))
			break;
	}
	fclose(temp);
}
void addinclude(void)
/*
 * Look up the INCLUDE environment variable and append it to the
 * search path
 */
{
	char *string = getenv("CCINCL");
	if (string && string[0]) {
		char temp[500];
		strcpy(temp,string);
		if (prm_searchpath) {
			strcat(temp,";");
			strcat(temp,prm_searchpath);
			free(prm_searchpath);
		}
		prm_searchpath = malloc(strlen(temp)+1);
		strcpy(prm_searchpath,temp);
	}
}
int parseenv(char *name)
/*
 * Parse the environment argument string
 */
{
	char *string = getenv(name);
	return parse_arbitrary(string);
}
void dumperrs(FILE *file)
{
#ifdef DIAGNOSTICS
	if (diagcount)
		fprintf(file,"%d Diagnostics detected\n",diagcount);
#endif
	if (total_errors)
		fprintf(file,"%d Total errors\n",total_errors);
	if (prm_diag)
		mem_summary();
}
void summary(void)
{       
	if (prm_listfile) {
    fprintf(listFile,"\f\n *** global scope symbol table ***\n\n");
    list_table(&gsyms,0);
		if (tagtable.head) {
    	fprintf(listFile,"\n *** structures and unions ***\n\n");
    	list_table(&tagtable,0);
		}
		dumperrs(listFile);
  }
}
void ctrlchandler(int aa)
{
	longjmp(ctrlcreturn,1);
}
int main(int argc,char *argv[])
{
	char buffer[40];
	char *p;
  banner("%s Version %d.%02d Copyright (c) 1994-1997, LADsoft",PROGNAME,VERSION/100,VERSION %100);
  outfile[0] = 0;

	/* parse the environment and command line */
	/* inpout cfg file has already been parsed */
  if (!parseenv(ENVNAME))
    usage(argv[0]);
  if (!parse_args(&argc, argv, TRUE) || (!file_count && argc == 1))
    usage(argv[0]);


	/* tack the environment includes in */
	addinclude();

	/* processor-dependent initialization */
	confsetup();

  /* Scan the command line for file names or response files */
	{ int i;
		for (i=1; i <argc; i++) 
			InsertAnyFile(0,0,argv[i],0,-1);
	}


  /* Set up a ctrl-C handler so we can exit the prog */
	signal(SIGINT,ctrlchandler);
	if (setjmp(ctrlcreturn))
		exit(1);
	/* loop through and compile all the files on the file list */
	while (clist) {
		inasmini();
		memini();
	  symini();
		stmtini();
		kwini();
		initini();
		preprocini();
		exprini();
		declini();
		funcini();
		peepini();
		outcodeini();
		regini();
		printf("file: %s\n",clist->data);
	  strcpy(buffer,clist->data);
#ifdef OBJEXT
		if (prm_asmfile)
#endif
			setfile(outfile,buffer,SOURCEXT);
#ifdef OBJEXT
		else
			setfile(outfile,buffer,OBJEXT);
#endif
		setfile(cppfile,buffer,".I");
		setfile(listfile,buffer,".LST");
		setfile(errorfile,buffer,".ERR");
		prm_cplusplus = FALSE;
	  AddExt(buffer,".C");
#ifdef CPLUSPLUS
		p = strrchr(buffer,'.');
		if (*(p-1) != '.') {
			if (p[1] == 'c' || p[1] == 'C')
				if (p[2] == 'p' || p[2] == 'P')
					if (p[3] == 'p' || p[3] == 'P')
						prm_cplusplus = TRUE;
		}
#endif
		infile = errfile = litlate(buffer);

		if (prm_cppfile) {
			if (!(cppFile = fopen(cppfile,"w")))
				fatal("Can't open cpp file %s",cppfile);
		}
  	if (!(inputFile = fopen(infile,"r")))
    	fatal("Can't open input file %s",infile);
  	if (!(outputFile = fopen(outfile,"w"))) {
    	fclose(inputFile);
    	fatal("Can't open output file %s",outfile);
	  }
		if (prm_asmfile)
			asm_header();
	  if (prm_listfile)
  		if (!(listFile = fopen(listfile,"w"))) {
    		fclose(inputFile);
		    fclose(outputFile);
    		fatal("Can't open list file %s",listfile);
  		}
	  if (prm_errfile)
  		if (!(errFile = fopen(errorfile,"w"))) {
				fclose(listFile);
    		fclose(inputFile);
		    fclose(outputFile);
    		fatal("Can't open error file %s",errorfile);
  		}
		initerr();
	  initsym();
		setglbdefs();
  	getch();
  	getsym();
	  compile();
		summary();
  	release_global();
		dumperrs(stdout);
	  fclose(inputFile);
		if (prm_asmfile) {
  		fclose(outputFile);
		}
  	if (prm_listfile)
    	fclose(listFile);
  	if (prm_errfile)
    	fclose(errFile);
  	if (prm_cppfile)
    	fclose(cppFile);
		clist = clist->link;

		/* Remove the ASM file if there are errors */
	if (total_errors)
			remove(outfile);

		/* Remove the ERR file if no warnings / errors */
		if (!errlist && prm_errfile)
			remove(errorfile);

		/* Flag to stop if there are any errors */
		stoponerr |= total_errors;
	}
  if (stoponerr)
   	return(1);
  else
    return(0);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产网红主播福利一区二区| 正在播放亚洲一区| 亚洲一区二区在线免费看| 欧美三电影在线| 激情偷乱视频一区二区三区| 国产精品不卡一区二区三区| 欧美日韩国产系列| 日韩中文字幕亚洲一区二区va在线| 久久午夜电影网| 欧美在线影院一区二区| 精品一区精品二区高清| 亚洲人成亚洲人成在线观看图片| 日韩一区二区中文字幕| 91丨九色porny丨蝌蚪| 免费一区二区视频| 一区二区三区在线观看视频| 精品国产乱码久久| 欧美日韩情趣电影| 不卡在线视频中文字幕| 日本va欧美va欧美va精品| 成人欧美一区二区三区小说| 欧美videofree性高清杂交| 国产成人激情av| 免费在线观看不卡| 一区二区三区视频在线看| 国产性做久久久久久| 欧美高清视频一二三区| 国产精品一品二品| 日本亚洲免费观看| 亚洲欧洲日本在线| 国产欧美精品一区二区色综合 | 337p亚洲精品色噜噜狠狠| 国产精品一区二区你懂的| 国产精品99久久久久久有的能看| 一区二区在线免费观看| 中文字幕一区二区三区不卡 | 欧美一级免费大片| 91麻豆免费看| 成人成人成人在线视频| 国产成人免费视频网站 | 91在线观看成人| 天堂蜜桃一区二区三区| 亚洲资源在线观看| 亚洲视频免费在线| 亚洲色图欧美在线| 亚洲欧洲av在线| 国产免费久久精品| 国产日韩欧美在线一区| 亚洲精品一区二区三区影院 | av亚洲精华国产精华| 国产精品一级黄| 国产精品99久久不卡二区| 国产一区二区三区| 久久97超碰色| 国产剧情一区在线| 国产精品一区二区果冻传媒| 国内外成人在线| 国产美女在线精品| 国产91精品一区二区麻豆亚洲| 久久99精品久久久久久国产越南| 九色porny丨国产精品| 精品制服美女久久| 国产麻豆视频精品| 国产成人av电影在线| 国产一二三精品| 丁香婷婷综合色啪| 91网站最新地址| 91国产视频在线观看| 在线一区二区观看| 一本色道久久综合亚洲精品按摩| 成人av在线电影| 色一情一乱一乱一91av| 欧美色精品在线视频| 91精品久久久久久久99蜜桃 | 91麻豆精品国产综合久久久久久| 欧美精品tushy高清| 91精品黄色片免费大全| 精品福利一二区| 国产欧美精品日韩区二区麻豆天美| 国产日韩精品一区二区三区| 国产亚洲va综合人人澡精品| 综合色中文字幕| 亚洲福利国产精品| 日产国产欧美视频一区精品| 色综合天天综合色综合av| 在线观看av不卡| 日韩一区二区三区免费观看| 国产精品乱人伦| 捆绑调教一区二区三区| 色播五月激情综合网| 久久一二三国产| 图片区日韩欧美亚洲| 99免费精品在线观看| 91精品国产91久久综合桃花| 亚洲欧洲日韩一区二区三区| 久久国产精品99精品国产| 色婷婷久久久综合中文字幕 | 欧美另类z0zxhd电影| 国产精品色哟哟网站| 麻豆精品久久精品色综合| 97国产一区二区| 久久久久久久久蜜桃| 日韩国产欧美一区二区三区| 色噜噜狠狠色综合欧洲selulu| 久久婷婷综合激情| 美女视频一区二区| 欧美性猛交xxxx黑人交| 亚洲欧美一区二区久久| 久久66热偷产精品| 91麻豆精品国产91久久久使用方法 | 亚洲欧美日本韩国| 国产成人在线免费| 精品国产3级a| 另类综合日韩欧美亚洲| 欧美视频日韩视频在线观看| 国产精品久久精品日日| 国产精品一区一区| 精品久久久久久久久久久院品网 | 日本美女一区二区| 欧美色手机在线观看| 亚洲免费观看高清| av在线不卡网| 国产精品私人自拍| 国产精品99久久久久久久女警| 日韩欧美视频一区| 秋霞电影网一区二区| 51精品国自产在线| 亚洲va欧美va天堂v国产综合| 日本高清视频一区二区| 亚洲男人的天堂在线观看| jvid福利写真一区二区三区| 国产精品美女久久久久久久网站| 国产老女人精品毛片久久| 久久久久久一二三区| 国产精品资源在线| 欧美国产欧美综合| 丁香一区二区三区| 亚洲欧洲av一区二区三区久久| 成人va在线观看| 日韩一区在线播放| 91黄色免费版| 亚洲成av人在线观看| 在线电影院国产精品| 日本不卡不码高清免费观看| 欧美一区二区日韩| 精品制服美女丁香| 国产欧美日韩亚州综合| 成人性视频网站| 亚洲欧美日韩久久精品| 欧美亚洲另类激情小说| 天堂av在线一区| 精品伦理精品一区| 成人中文字幕合集| 亚洲免费观看高清完整版在线观看| 在线观看日韩电影| 青青草精品视频| 日本一区二区高清| 色哟哟国产精品| 男女男精品视频网| 国产日韩视频一区二区三区| 色综合久久综合中文综合网| 婷婷国产v国产偷v亚洲高清| 精品少妇一区二区三区| 成人av免费在线| 亚洲成人久久影院| 欧美变态tickle挠乳网站| www.亚洲精品| 天天av天天翘天天综合网色鬼国产| 4438x成人网最大色成网站| 国产精品一区二区三区四区 | 亚洲天天做日日做天天谢日日欢| 欧洲av在线精品| 激情成人午夜视频| 一区二区三区四区视频精品免费| 91精品国产一区二区三区| 国模大尺度一区二区三区| 日韩一区日韩二区| 日韩欧美你懂的| 97se亚洲国产综合自在线| 日韩精彩视频在线观看| 国产精品免费av| 日韩一级片在线观看| av不卡免费电影| 免费高清成人在线| 综合激情成人伊人| 日韩免费观看高清完整版| 97精品久久久久中文字幕| 麻豆91精品91久久久的内涵| 中文字幕制服丝袜一区二区三区 | 成人免费视频在线观看| 欧美一区二区三区免费视频| 99久精品国产| 国模冰冰炮一区二区| 亚洲成人精品一区| 中文字幕日本不卡| 久久婷婷国产综合精品青草| 欧美日韩一区国产| 91在线丨porny丨国产| 狠狠狠色丁香婷婷综合久久五月| 亚洲一区二区综合|