⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lex.c

📁 把pascal程序转成C语言程序 把pascal程序转成C语言程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		infname, inf_lnum, outf_lnum, msg);	fprintf(logf, "Translation aborted.\n");    }    closelogfile();    exit_failure();}void interror(proc, msg)      /* does not return */char *proc, *msg;{    error(format_ss("Internal error in %s: %s", proc, msg));}void warning(msg)char *msg;{    if (checkeatnote(msg)) {	if (verbose)	    fprintf(logf, "%s:%d:%d: Omitted warning: %s\n",		    infname, inf_lnum, outf_lnum, msg);	return;    }    beginerror();    addnote(format_s("Warning: %s", msg), curserial);    counterror();}void intwarning(proc, msg)char *proc, *msg;{    if (checkeatnote(msg)) {	if (verbose)	    fprintf(logf, "%s:%d:%d: Omitted internal error in %s: %s\n",		    infname, inf_lnum, outf_lnum, proc, msg);	return;    }    beginerror();    addnote(format_ss("Internal error in %s: %s", proc, msg), curserial);    if (error_crash)        exit_failure();    counterror();}void note(msg)char *msg;{    if (blockkind == TOK_IMPORT || checkeatnote(msg)) {	if (verbose)	    fprintf(logf, "%s:%d:%d: Omitted note: %s\n",		    infname, inf_lnum, outf_lnum, msg);	return;    }    beginerror();    addnote(format_s("Note: %s", msg), curserial);    counterror();}void endnote(msg)char *msg;{    if (blockkind == TOK_IMPORT || checkeatnote(msg)) {	if (verbose)	    fprintf(logf, "%s:%d:%d: Omitted end-note: %s\n",		    infname, inf_lnum, outf_lnum, msg);	return;    }    if (verbose)	fprintf(logf, "%s:%d:%d: Recorded end-note: %s\n",		infname, inf_lnum, outf_lnum, msg);    (void) strlist_add(&endnotelist, msg);}void showendnotes(){    while (initialcalls) {	if (initialcalls->value)	    endnote(format_s("Remember to call %s in main program [215]",			     initialcalls->s));	strlist_eat(&initialcalls);    }    if (endnotelist) {	end_source();	while (endnotelist) {	    if (!quietmode) {		if (outf != stdout) {		    beginerror();		    printf("Note: %s\n", endnotelist->s);		} else		    fprintf(stderr, "Note: %s\n", endnotelist->s);	    }	    if (slashslash)		fprintf(outf, "// p2c: Note: %s\n", endnotelist->s);	    else		fprintf(outf, "/* p2c: Note: %s */\n", endnotelist->s);	    outf_lnum++;	    strlist_eat(&endnotelist);	}    }}char *tok_name(tok)Token tok;{    if (tok == TOK_END && inputkind == INP_STRLIST)	return "end of macro";    if (tok == curtok && tok == TOK_IDENT)        return format_s("'%s'", curtokcase);    if (!modulenotation) {        switch (tok) {            case TOK_MODULE:    return "UNIT";            case TOK_IMPORT:    return "USES";            case TOK_EXPORT:    return "INTERFACE";            case TOK_IMPLEMENT: return "IMPLEMENTATION";	    default:		break;        }    }    return toknames[(int) tok];}void expected(msg)char *msg;{    error(format_ss("Expected %s, found %s", msg, tok_name(curtok)));}void expecttok(tok)Token tok;{    if (curtok != tok)        expected(tok_name(tok));}void needtok(tok)Token tok;{    if (curtok != tok)        expected(tok_name(tok));    gettok();}int wexpected(msg)char *msg;{    warning(format_ss("Expected %s, found %s [227]", msg, tok_name(curtok)));    return 0;}int wexpecttok(tok)Token tok;{    if (curtok != tok)        return wexpected(tok_name(tok));    else	return 1;}int wneedtok(tok)Token tok;{    if (wexpecttok(tok)) {	gettok();	return 1;    } else	return 0;}void alreadydef(sym)Symbol *sym;{    warning(format_s("Symbol '%s' was already defined [220]", sym->name));}void undefsym(sym)Symbol *sym;{    warning(format_s("Symbol '%s' is not defined [221]", sym->name));}void symclass(sym)Symbol *sym;{    warning(format_s("Symbol '%s' is not of the appropriate class [222]", sym->name));}void badtypes(){    warning("Type mismatch [223]");}void valrange(){    warning("Value range error [224]");}void skipparens(){    Token begintok;    if (curtok == TOK_LPAR) {        gettok();        while (curtok != TOK_RPAR)            skipparens();    } else if (curtok == TOK_LBR) {        gettok();        while (curtok != TOK_RBR)            skipparens();    } else if (curtok == TOK_BEGIN || curtok == TOK_RECORD ||	       curtok == TOK_CASE) {	begintok = curtok;        gettok();        while (curtok != TOK_END)	    if (curtok == TOK_CASE && begintok == TOK_RECORD)		gettok();	    else		skipparens();    }    gettok();}void skiptotoken2(tok1, tok2)Token tok1, tok2;{    while (curtok != tok1 && curtok != tok2 &&	   curtok != TOK_END && curtok != TOK_RPAR &&	   curtok != TOK_RBR && curtok != TOK_EOF)	skipparens();}void skippasttoken2(tok1, tok2)Token tok1, tok2;{    skiptotoken2(tok1, tok2);    if (curtok == tok1 || curtok == tok2)	gettok();}void skippasttotoken(tok1, tok2)Token tok1, tok2;{    skiptotoken2(tok1, tok2);    if (curtok == tok1)	gettok();}void skiptotoken(tok)Token tok;{    skiptotoken2(tok, tok);}void skippasttoken(tok)Token tok;{    skippasttoken2(tok, tok);}int skipopenparen(){    if (wneedtok(TOK_LPAR))	return 1;    skiptotoken(TOK_SEMI);    return 0;}int skipcloseparen(){    if (curtok == TOK_COMMA)	warning("Too many arguments for built-in routine [225]");    else	if (wneedtok(TOK_RPAR))	    return 1;    skippasttotoken(TOK_RPAR, TOK_SEMI);    return 0;}int skipcomma(){    if (curtok == TOK_RPAR)	warning("Too few arguments for built-in routine [226]");    else	if (wneedtok(TOK_COMMA))	    return 1;    skippasttotoken(TOK_RPAR, TOK_SEMI);    return 0;}char *findaltname(name, num)char *name;int num;{    char *cp;    if (num <= 0)        return name;    if (num == 1 && *alternatename1)        return format_s(alternatename1, name);    if (num == 2 && *alternatename2)        return format_s(alternatename2, name);    if (*alternatename)        return format_sd(alternatename, name, num);    cp = name;    if (*alternatename1) {        while (--num >= 0)	    cp = format_s(alternatename1, cp);    } else {	while (--num >= 0)	    cp = format_s("%s_", cp);    }    return cp;}Symbol *findsymbol_opt(name)char *name;{    register int i;    register unsigned int hash;    register char *cp;    register Symbol *sp;    hash = 0;    for (cp = name; *cp; cp++)        hash = hash*3 + *cp;    sp = symtab[hash % SYMHASHSIZE];    while (sp && (i = strcmp(sp->name, name)) != 0) {        if (i < 0)            sp = sp->left;        else            sp = sp->right;    }    return sp;}Symbol *findsymbol(name)char *name;{    register int i;    register unsigned int hash;    register char *cp;    register Symbol **prev, *sp;    hash = 0;    for (cp = name; *cp; cp++)        hash = hash*3 + *cp;    prev = symtab + (hash % SYMHASHSIZE);    while ((sp = *prev) != 0 &&           (i = strcmp(sp->name, name)) != 0) {        if (i < 0)            prev = &(sp->left);        else            prev = &(sp->right);    }    if (!sp) {        sp = ALLOCV(sizeof(Symbol) + strlen(name), Symbol, symbols);        sp->mbase = sp->fbase = NULL;        sp->left = sp->right = NULL;        strcpy(sp->name, name);        sp->flags = 0;	sp->kwtok = TOK_NONE;        sp->symbolnames = NULL;        *prev = sp;    }    return sp;}void clearprogress(){    oldinfname = NULL;}void progress(){    char *ctxname;    int needrefr;    static int prevlen;    if (showprogress) {        if (!curctx || curctx == nullctx || curctx->kind == MK_MODULE ||            !strncmp(curctx->name, "__PROCPTR", 9) || blockkind == TOK_IMPORT)            ctxname = "";        else            ctxname = curctx->name;        needrefr = (inf_lnum & 15) == 0;        if (oldinfname != infname || oldctxname != ctxname) {	    if (oldinfname != infname)		prevlen = 60;            fprintf(stderr, "\r%*s", prevlen + 2, "");            oldinfname = infname;            oldctxname = ctxname;            needrefr = 1;        }        if (needrefr) {            fprintf(stderr, "\r%5d %s  %s", inf_lnum, infname, ctxname);	    prevlen = 8 + strlen(infname) + strlen(ctxname);        } else {            fprintf(stderr, "\r%5d", inf_lnum);	    prevlen = 5;	}    }}void replacestrings(buf, sl)char *buf;Strlist *sl;{    Strlist *p = sl;    while (p) {	char *cp = buf;	char first = tolower(p->s[0]);	char ufirst = toupper(p->s[0]);	while (*cp) {	    if (*cp == first || *cp == ufirst) {		char *cp1 = cp;		char *cp2 = p->s;		while (*cp2 && toupper(*cp1) == toupper(*cp2))		    cp1++, cp2++;		if (!*cp2) {		    int diff = strlen((char *)p->value) - strlen(p->s);		    if (diff > 0) {			cp1 = cp + strlen(cp);			while (cp1 >= cp) {			    cp1[diff] = *cp1;			    cp1--;			}		    } else if (diff < 0) {			while (*cp1) {			    cp1[diff] = *cp1;			    cp1++;			}			cp1[diff] = 0;		    }		    cp2 = (char *)p->value;		    while (*cp2)			*cp++ = *cp2++;		} else		    cp++;	    } else if (*cp == '\'') {		while (*++cp && *cp != '\'') ;		if (*cp) cp++;	    } else if (*cp == '"') {		while (*++cp && *cp != '"') ;		if (*cp) cp++;	    } else		cp++;	}	p = p->next;    }}void getline(){    char *cp, *cp2;    switch (inputkind) {        case INP_FILE:        case INP_INCFILE:            inf_lnum++;	    inf_ltotal++;            if (fgets(inbuf, 300, inf)) {                cp = inbuf + strlen(inbuf);                if (*inbuf && cp[-1] == '\n')                    cp[-1] = 0;		replacestrings(inbuf, replacebefore);		if (inbuf[0] == '#' && inbuf[1] == ' ' && isdigit(inbuf[2])) {		    cp = inbuf + 2;    /* in case input text came */		    inf_lnum = 0;      /*  from the C preprocessor */		    while (isdigit(*cp))			inf_lnum = inf_lnum*10 + (*cp++) - '0';		    inf_lnum--;		    while (isspace(*cp)) cp++;		    if (*cp == '"' && (cp2 = my_strchr(cp+1, '"')) != NULL) {			cp++;			infname = stralloc(cp);			infname[cp2 - cp] = 0;		    }		    getline();		    return;		}		if (copysource && *inbuf) {		    start_source();		    fprintf(outf, "%s\n", inbuf);		}                if (keepingstrlist) {                    strlist_append(keepingstrlist, inbuf)->value = inf_lnum;                }                if (showprogress && inf_lnum % showprogress == 0)                    progress();            } else {                if (showprogress)                    fprintf(stderr, "\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -