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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? getsym.c

?? C編譯器源碼是我到處找來的,看了之后很有收獲
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * 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
 *
 */
/* scanner
 */
/* Trigraphs implemented, won't work for token pasting though */
#include        <stdio.h>
#include				<ctype.h>
#include				<limits.h>
#include				"list.h"
#include        "expr.h"
#include        "c.h"
#include        "errors.h"
#include "utype.h"
#include "interp.h"

extern int prm_errfile;
extern int version;
extern LIST *clist;
extern FILE *cppFile, *listFile, *inputFile;
extern int prm_cplusplus,prm_cmangle,prm_ansi;
extern int ifskip,elsetaken;
extern IFSTRUCT *ifs;
extern char *errfile;
extern int errlineno;
extern int phiused;

extern char *infile;
extern short            *lptr;          /* shared with preproc */
extern FILE            *inclfile[10];  /* shared with preproc */
extern char            *inclfname[10];  /* shared with preproc */
extern IFSTRUCT				 *ifshold[10];
extern int             inclline[10];   /* shared with preproc */
extern int             incldepth;      /* shared with preproc */
extern int						prm_listfile;
int lineno;
short     inputline[4096];
int             lastch;
enum e_sym      lastst;
char            lastid[100] = "";
char            laststr[MAX_STRLEN + 1] = "";
long            ival = 0;
long double          rval = 0.0;
char            *linstack[20];  /* stack for substitutions */
char            chstack[20];    /* place to save lastch */
int             lstackptr = 0;  /* substitution stack pointer */
int cantnewline = FALSE;
int incconst = FALSE;

int backupchar = -1;

static int phiputcpp,phiputlist,phiputerror;
static int commentlevel;

void initsym(void)
{       lptr = inputline;
        inputline[0] = 0;
        lineno = 0; errlineno = 0;
				lastid[0] = 0;
				laststr[0] = 0;
				ival = 0;
				rval = 0.0;
				cantnewline=FALSE;
				incconst = FALSE;
				backupchar = -1;
				phiputcpp=phiputlist = phiputerror = FALSE;
}

void lineToCpp(void)
/*
 * line has been preprocessed, dump it to a file
 */
{
		if (cppFile) {
			char buf[100],*q=buf;
			short *p = inputline;
			*q = 0;
			if (!phiputcpp) {
				phiputcpp = TRUE;
				if (phiused)
					fputc('\x1f',cppFile);
				fprintf(cppFile,"/* LADsoft C compiler Version %d.%02d */\n\n",version / 100, version %100);
			}
			while (*p) {
				int i;
				if (*q) {
					buf[0] = *q;
					i = 1;
				}
				else
					i = 0;
				i+=installphichar(*p++,buf,i);
				buf[i] = 0;
				q = buf;
				while (*q && (*(q+1) || ((*q &0xf0) != 0x90)))
					fputc(*q++,cppFile);
			}
		}				
}
/* Strips comments and also the newline char at the end of the line */
static void stripcomment (short *line)
{
	short *s = line, *e = s;
	while (*e) {
		if (*e == '/' && (!commentlevel || !prm_ansi || prm_cplusplus)) {
				if (*(e+1) == '*') {
					e++;
					commentlevel++;
				}
				else if (*(e+1) == '/' && !commentlevel && (!prm_ansi || prm_cplusplus)) {
					*s = 0;
					return;
				}
				else if (!commentlevel)
					*s++ = *e;
		}
		else if (commentlevel && *e == '*' && *(e+1) == '/') {
			commentlevel--;
			e++;
			if (commentlevel == 0) {
				*s++ = ' ';		/* Comments are whitespace */
			}
		}
		else if (!commentlevel)
			*s++ = *e;
    e++;
	}
	*s = 0;
}
/* strip trigraphs */
void striptrigraph(short *buf)
{
	short *cp = buf;
	while (*cp) {
		if (*cp == '?' && *(cp+1) == '?') {
			cp +=2;
			switch (*cp++) {
				case '=':
					*buf++='#';
					break;
				case '(':
					*buf++='[';
					break;
				case '/':
					*buf++='\\';
					break;
				case ')':
					*buf++=']';
					break;
				case '\'':
					*buf++='^';
					break;
				case '<':
					*buf++='{';
					break;
				case '!':
					*buf++='|';
					break;
				case '>':
					*buf++='}';
					break;
				case '-':
					*buf++='~';
					break;
				default:
					cp-=2;
					break;
			}
		}
		else *buf++ = *cp++;
	}
	*buf = 0;
}
int     getline(int listflag)
/*
 * Read in a line, preprocess it, and dump it to the list and preproc files
 * Also strip comments and alter trigraphs
 */
{       int     rv,rvc,i,prepping,temp;

		char ibuf[4096];
		int *ptr = ibuf;
		if (cantnewline) {
			return(0);
		}
		do {
				rv = FALSE;
				prepping = FALSE;
				rvc = 0;
        if( lineno > 0 && listflag && prm_listfile) {
					if (!phiputlist) {
						if (phiused) {
							fputc('\x1f',listFile);
						}
						phiputlist = TRUE;
					}
        }
        if( lineno > 0 && prm_errfile) {
					if (!phiputerror) {
						if (phiused) {
							fputc('\x1f',listFile);
						}
						phiputerror = TRUE;
					}
        }
				lferror();
				while(rvc +131 < 4096 && !rv) {
	        ++lineno; ++errlineno;
        	rv = (philine(ibuf+rvc,200,inputFile) == NULL);
					if (rv)
						break;
					rvc = strlen(ibuf);
					if (ibuf[rvc-1] != '\n') {
						ibuf[rvc++] = '\n';
						ibuf[rvc] = 0;
					}
					rvc-=2;
					while (ibuf[rvc]==' ')
						rvc--;
					if (ibuf[rvc] != '\\')
						break;
				}
				if (rvc)
					rv = FALSE;
        if(prm_listfile) {
					if (!phiputlist) {
						if (phiused) {
							fputc('\x1f',listFile);
						}
						fprintf(listFile,"LADsoft C compiler Version %d.%02d - %s\n\n",version / 100, version % 100,clist->data);
						phiputlist = TRUE;
					}
					fprintf(listFile,"%5d: %s",lineno, ibuf);
        }
        if( rv) {
								if (ifs)
									generror(ERR_PREPROCMATCH,0,0);
								if (commentlevel)
									generror(ERR_COMMENTMATCH,0,0);
								if (incldepth > 0) {
	                fclose(inputFile);
  	              inputFile = inclfile[--incldepth];
    	            lineno = inclline[incldepth];
									infile = inclfname[incldepth];
									errlineno = lineno;
									errfile = infile;
									ifs = ifshold[incldepth];
									commentlevel = 0;
									popif();
                	return getline(0);
								}
        }
        if( rv )
                return 1;
				lptr = inputline;
				ptr = ibuf;
				while((temp = parsechar(&ptr)) != 0)
					*lptr++ = temp;
				*lptr = 0;
				stripcomment(inputline);
				striptrigraph(inputline);
        lptr = inputline;
				while (iswhitespacechar(*lptr))
					lptr++;			
        if(lptr[0] == '#') {
          listflag = preprocess();
					prepping = TRUE;
				}
		} while (ifskip || prepping);
		defcheck(inputline);
		lineToCpp();
    return 0;
}

/*
 *      getch - basic get character routine.
 */
int     getch(void)
{       while( (lastch = *lptr++) == '\0') {
                if( lstackptr > 0 ) {
                        lptr = linstack[--lstackptr];
                        lastch = chstack[lstackptr];
                        return lastch;
                        }
								if (cantnewline) {
									lptr--;
									return lastch = ' ';
								}
                if(getline(incldepth == 0))
                        return lastch = -1;
                }
        return lastch;
}
 
/*
 *      getid - get an identifier.
 *
 *      identifiers are any isidch conglomerate
 *      that doesn't start with a numeric character.
 *      this set INCLUDES keywords.
 */
void     getid()
{       register int    i;
        i = 0;
				if (prm_cmangle)
					lastid[i++] = '_';		/* Mangling */
				if (lastch == 'L') {
					lastid[i++] = 'L';
					getch();
					if (lastch == '\"') {
												getch();
												i=0;
												while (lastch != '\"' && lastch) {
													*(((short*)(laststr))+i++) = lastch;
													getch();
												}
												if ((lastch & 0x7f) != '\"')
        	                        generror(ERR_NEEDCHAR,'\"',0);
          	              else
            	                    getch();
													*(((short*)(laststr))+i) = 0;
												lastst = lsconst;
												return;
					}
				}
				
				while(issymchar(lastch)) {
					if (i < 100)
						i+=installphichar(lastch,lastid,i);
					getch();
        }
				if ((lastid[i-1] & 0xf0) == 0x90)
					lastid[i-1] = 0x90;
        lastid[i] = '\0';
        lastst = id;
}
 
/*
 *      getsch - get a character in a quoted string.
 *
 *      this routine handles all of the escape mechanisms
 *      for characters in strings and character constants.
 */
int     getsch(void)        /* return an in-quote character */
{       register int    i, j;
        if(lastch == '\n')
                return -1;
        if(lastch != '\\') {
                i = lastch;
                getch();
                return i;
                }
        getch();        /* get an escaped character */
        if(isdigit(lastch)) {
                for(i = 0,j=0;j < 3;++j) {
                        if(lastch <= '7' && lastch >= '0')
                                i = (i << 3) + lastch - '0';
                        else
                                break;
                        getch();
                        }
                return i;
                }
        i = lastch;
        getch();
        switch(i) {
                case '\n':
                        getch();
                        return getsch();
								case 'a':
												return '\a';
                case 'b':
                        return '\b';
                case 'f':
                        return '\f';
                case 'n':
                        return '\n';
                case 'r':
                        return '\r';
								case 't':
												return '\t';
								case '\'':
												return '\'';
								case '\"':
												return '\"';
								case '\\':
												return '\\';
								case 'x':
												{
													int n=0,count=0;
												  while (isxdigit(lastch)) {
														count++;
													  lastch-=0x30;
														if (lastch > 10) lastch -=7;
														if (lastch > 10) lastch -=32;
														n*=16;
														n+=lastch;
														getch();
													}
													if (count > 2)
														generror(ERR_CONSTTOOLARGE,0,0);
													return n;
												}
                default:
												if (isdigit(i) && i < '9') {
													int n = 0;
													while (isdigit(i) && i < '9') {
														n = n * 8 + (lastch - '0');
														getch();
													}
													return n;
												}
                        return i;
                }
}

int     radix36(char c)
{       if(isdigit(c))
                return c - '0';
        if(c >= 'a' && c <= 'z')
                return c - 'a' + 10;
        if(c >= 'A' && c <= 'Z')
                return c - 'A' + 10;
        return -1;
}
 
/*
 *      getbase - get an integer in any base.
 */
void getbase(int b,char **ptr)
{       register long    i, j;
				int errd = 0;
        i = 0;
        while(isalnum(**ptr)) {
                if((j = radix36(*(*ptr)++)) < b) {
												if (i > (ULONG_MAX-j)/b)
													if (!errd) {
														generror(ERR_CONSTTOOLARGE,0,0);
														errd++;
													}
                        i = i * b + j;
                        }
                else break;
                }
        ival = i;
        lastst = iconst;
}
 
/*
 *      getfrac - get fraction part of a floating number.
 */
void getfrac(char **ptr)
{       double  frmul;
        frmul = 0.1;
        while(isdigit(**ptr)) {
                rval += frmul * (*(*ptr)++ - '0');
                frmul *= 0.1;
                }
}
 
/*
 *      getexp - get exponent part of floating number.
 *
 *      this algorithm is primative but usefull.  Floating
 *      exponents are limited to +/-255 but most hardware
 *      won't support more anyway.
 */
void getexp(char **ptr)
{       double  expo, exmul;
        expo = 1.0;
        if(lastst != rconst)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黑人巨大精品欧美一区| 日本中文字幕不卡| 久久影音资源网| 欧美一区二区三区成人| 91精品国产免费久久综合| 91精品国产综合久久香蕉麻豆 | 日韩午夜av电影| 欧美另类z0zxhd电影| 欧美日韩国产大片| 制服丝袜日韩国产| 日韩三级免费观看| 精品免费国产一区二区三区四区| 精品欧美黑人一区二区三区| 久久久久久久综合| 中文字幕一区二区在线观看 | 一区二区三区日韩欧美精品| 亚洲丝袜精品丝袜在线| 夜夜嗨av一区二区三区中文字幕| 亚洲成人动漫在线观看| 裸体在线国模精品偷拍| 国产一区二区三区日韩 | 亚洲欧美另类图片小说| 一个色综合网站| 麻豆精品在线观看| 国产sm精品调教视频网站| 成人激情免费网站| 欧美伊人久久久久久午夜久久久久| 欧美日韩三级视频| 日韩欧美在线综合网| 欧美极品美女视频| 亚洲国产精品一区二区尤物区| 美女脱光内衣内裤视频久久网站| 国产成人免费在线观看| 91社区在线播放| 91精品国产综合久久精品麻豆 | 福利视频网站一区二区三区| 91美女片黄在线观看| 日韩欧美国产精品| 综合av第一页| 老司机午夜精品99久久| 91色综合久久久久婷婷| 精品国产乱子伦一区| 亚洲精品乱码久久久久久| 国内精品写真在线观看| 欧美视频精品在线观看| 国产女主播视频一区二区| 日精品一区二区三区| 不卡视频一二三| 欧美大胆人体bbbb| 亚洲欧美成aⅴ人在线观看| 国模冰冰炮一区二区| 欧美久久久久久久久中文字幕| 国产精品欧美久久久久一区二区| 日韩va欧美va亚洲va久久| 成人免费精品视频| 精品国产乱子伦一区| 天天影视涩香欲综合网| 91国内精品野花午夜精品| 久久久久久久国产精品影院| 日本在线观看不卡视频| 欧洲人成人精品| 亚洲欧美日韩一区| 成人午夜又粗又硬又大| 久久免费视频一区| 久草热8精品视频在线观看| 欧美日韩一区二区三区免费看| 国产精品剧情在线亚洲| 成人性生交大片| 久久综合精品国产一区二区三区| 日本中文字幕一区二区有限公司| 在线看日本不卡| 亚洲女厕所小便bbb| 成人免费黄色大片| 国产亚洲1区2区3区| 国产乱码精品一品二品| 久久精品一区二区三区四区 | 久久九九全国免费| 国内精品嫩模私拍在线| 亚洲精品一区二区三区福利| 久久精品国产免费| 精品国产一区二区国模嫣然| 激情丁香综合五月| 亚洲精品在线免费播放| 国模套图日韩精品一区二区 | 婷婷久久综合九色国产成人| 欧美日韩一区不卡| 奇米影视在线99精品| 精品国产百合女同互慰| 久久成人免费日本黄色| 国产午夜亚洲精品理论片色戒| 国产东北露脸精品视频| 国产精品福利一区| 91福利资源站| 久久精品国内一区二区三区| 2020国产精品自拍| 成人性生交大片免费看视频在线| 亚洲欧洲精品一区二区三区不卡| 日本精品视频一区二区| 午夜欧美大尺度福利影院在线看| 3d动漫精品啪啪一区二区竹菊| 日本欧洲一区二区| 国产日产精品一区| 在线观看国产一区二区| 另类小说色综合网站| 国产精品乱人伦| 欧美精品第1页| 国产馆精品极品| 一区二区国产盗摄色噜噜| 日韩欧美国产午夜精品| 成人av在线一区二区| 天堂一区二区在线| 欧美国产一区视频在线观看| 欧美日韩专区在线| 国产成人综合精品三级| 亚欧色一区w666天堂| 国产清纯白嫩初高生在线观看91| 欧美在线高清视频| 国产成人午夜精品5599| 性久久久久久久久| 国产欧美日韩不卡| 91精品久久久久久久91蜜桃| 99久免费精品视频在线观看 | 亚洲精品少妇30p| 欧美一个色资源| 一本久久a久久精品亚洲| 精品一区二区免费在线观看| 一二三四社区欧美黄| 国产日韩在线不卡| 欧美成人猛片aaaaaaa| 欧美日韩精品欧美日韩精品一综合| 国产+成+人+亚洲欧洲自线| 午夜国产不卡在线观看视频| 亚洲日本在线天堂| 国产女人18毛片水真多成人如厕| 欧美一级欧美三级| 欧美日韩视频在线第一区| 99麻豆久久久国产精品免费优播| 国产一二三精品| 国产综合久久久久影院| 日韩av电影天堂| 久久成人免费电影| 午夜电影一区二区| 亚洲午夜精品久久久久久久久| 中文字幕字幕中文在线中不卡视频| 久久亚洲一区二区三区明星换脸| 51精品国自产在线| 欧美日韩精品专区| 欧美日韩一级二级| 欧美日韩一区 二区 三区 久久精品| 99re热这里只有精品免费视频| 国产成人综合亚洲网站| 国产电影一区在线| 成人晚上爱看视频| 懂色av一区二区三区蜜臀| 国产成人av电影| 成人永久免费视频| 99精品黄色片免费大全| 91亚洲男人天堂| 91美女片黄在线| 在线观看亚洲精品视频| 欧洲国内综合视频| 欧美日韩一区三区四区| 欧美日韩免费视频| 91麻豆精品国产91久久久久| 日韩欧美一级在线播放| 久久久久久**毛片大全| 国产精品电影一区二区三区| 最近中文字幕一区二区三区| 一区二区三区电影在线播| 午夜精品一区在线观看| 另类中文字幕网| 成人精品鲁一区一区二区| 色综合久久综合网| 91精品久久久久久久99蜜桃| 精品国偷自产国产一区| 中文字幕制服丝袜一区二区三区| 亚洲综合免费观看高清在线观看| 一区二区三区欧美| 久久99精品视频| 99精品视频一区| 91精品久久久久久久久99蜜臂| 久久久高清一区二区三区| 亚洲欧美视频一区| 日本成人中文字幕在线视频 | 亚洲va韩国va欧美va精品| 麻豆成人av在线| av成人动漫在线观看| 91精品国产免费| 亚洲视频一二三| 久久av资源网| 欧美网站一区二区| 国产人伦精品一区二区| 日日夜夜免费精品| av成人免费在线观看| 日韩精品一区二区三区视频| 亚洲男人电影天堂| 国产在线不卡一卡二卡三卡四卡| 在线视频亚洲一区| 国产欧美一区二区精品性色超碰 | 日韩黄色片在线观看|