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

📄 output.c

📁 操作系统源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		++lowzero;	    return (j);	}    }}output_base(){    register int i, j;    fprintf(output_file, "short %ssindex[] = {%39d,", symbol_prefix, base[0]);    j = 10;    for (i = 1; i < nstates; i++)    {	if (j >= 10)	{	    if (!rflag) ++outline;	    putc('\n', output_file);	    j = 1;	}	else	    ++j;	fprintf(output_file, "%5d,", base[i]);    }    if (!rflag) outline += 2;    fprintf(output_file, "\n};\nshort %srindex[] = {%39d,", symbol_prefix,	    base[nstates]);    j = 10;    for (i = nstates + 1; i < 2*nstates; i++)    {	if (j >= 10)	{	    if (!rflag) ++outline;	    putc('\n', output_file);	    j = 1;	}	else	    ++j;	fprintf(output_file, "%5d,", base[i]);    }    if (!rflag) outline += 2;    fprintf(output_file, "\n};\nshort %sgindex[] = {%39d,", symbol_prefix,	    base[2*nstates]);    j = 10;    for (i = 2*nstates + 1; i < nvectors - 1; i++)    {	if (j >= 10)	{	    if (!rflag) ++outline;	    putc('\n', output_file);	    j = 1;	}	else	    ++j;	fprintf(output_file, "%5d,", base[i]);    }    if (!rflag) outline += 2;    fprintf(output_file, "\n};\n");    FREE(base);}output_table(){    register int i;    register int j;    ++outline;    fprintf(code_file, "#define YYTABLESIZE %d\n", high);    fprintf(output_file, "short %stable[] = {%40d,", symbol_prefix,	    table[0]);    j = 10;    for (i = 1; i <= high; i++)    {	if (j >= 10)	{	    if (!rflag) ++outline;	    putc('\n', output_file);	    j = 1;	}	else	    ++j;	fprintf(output_file, "%5d,", table[i]);    }    if (!rflag) outline += 2;    fprintf(output_file, "\n};\n");    FREE(table);}output_check(){    register int i;    register int j;    fprintf(output_file, "short %scheck[] = {%40d,", symbol_prefix,	    check[0]);    j = 10;    for (i = 1; i <= high; i++)    {	if (j >= 10)	{	    if (!rflag) ++outline;	    putc('\n', output_file);	    j = 1;	}	else	    ++j;	fprintf(output_file, "%5d,", check[i]);    }    if (!rflag) outline += 2;    fprintf(output_file, "\n};\n");    FREE(check);}intis_C_identifier(name)char *name;{    register char *s;    register int c;    s = name;    c = *s;    if (c == '"')    {	c = *++s;	if (!isalpha(c) && c != '_' && c != '$')	    return (0);	while ((c = *++s) != '"')	{	    if (!isalnum(c) && c != '_' && c != '$')		return (0);	}	return (1);    }    if (!isalpha(c) && c != '_' && c != '$')	return (0);    while (c = *++s)    {	if (!isalnum(c) && c != '_' && c != '$')	    return (0);    }    return (1);}output_defines(){    register int c, i;    register char *s;    for (i = 2; i < ntokens; ++i)    {	s = symbol_name[i];	if (is_C_identifier(s))	{	    fprintf(code_file, "#define ");	    if (dflag) fprintf(defines_file, "#define ");	    c = *s;	    if (c == '"')	    {		while ((c = *++s) != '"')		{		    putc(c, code_file);		    if (dflag) putc(c, defines_file);		}	    }	    else	    {		do		{		    putc(c, code_file);		    if (dflag) putc(c, defines_file);		}		while (c = *++s);	    }	    ++outline;	    fprintf(code_file, " %d\n", symbol_value[i]);	    if (dflag) fprintf(defines_file, " %d\n", symbol_value[i]);	}    }    ++outline;    fprintf(code_file, "#define YYERRCODE %d\n", symbol_value[1]);    if (dflag && unionized)    {	fclose(union_file);	union_file = fopen(union_file_name, "r");	if (union_file == NULL) open_error(union_file_name);	while ((c = getc(union_file)) != EOF)	    putc(c, defines_file);	fprintf(defines_file, " YYSTYPE;\nextern YYSTYPE %slval;\n",		symbol_prefix);    }}output_stored_text(){    register int c;    register FILE *in, *out;    fclose(text_file);    text_file = fopen(text_file_name, "r");    if (text_file == NULL)	open_error(text_file_name);    in = text_file;    if ((c = getc(in)) == EOF)	return;    out = code_file;    if (c ==  '\n')	++outline;    putc(c, out);    while ((c = getc(in)) != EOF)    {	if (c == '\n')	    ++outline;	putc(c, out);    }    if (!lflag)	fprintf(out, line_format, ++outline + 1, code_file_name);}output_debug(){    register int i, j, k, max;    char **symnam, *s;    ++outline;    fprintf(code_file, "#define YYFINAL %d\n", final_state);    outline += 3;    fprintf(code_file, "#ifndef YYDEBUG\n#define YYDEBUG %d\n#endif\n",	    tflag);    if (rflag)	fprintf(output_file, "#ifndef YYDEBUG\n#define YYDEBUG %d\n#endif\n",		tflag);    max = 0;    for (i = 2; i < ntokens; ++i)	if (symbol_value[i] > max)	    max = symbol_value[i];    ++outline;    fprintf(code_file, "#define YYMAXTOKEN %d\n", max);    symnam = (char **) MALLOC((max+1)*sizeof(char *));    if (symnam == 0) no_space();    /* Note that it is  not necessary to initialize the element		*/    /* symnam[max].							*/    for (i = 0; i < max; ++i)	symnam[i] = 0;    for (i = ntokens - 1; i >= 2; --i)	symnam[symbol_value[i]] = symbol_name[i];    symnam[0] = "end-of-file";    if (!rflag) ++outline;    fprintf(output_file, "#if YYDEBUG\nchar *%sname[] = {", symbol_prefix);    j = 80;    for (i = 0; i <= max; ++i)    {	if (s = symnam[i])	{	    if (s[0] == '"')	    {		k = 7;		while (*++s != '"')		{		    ++k;		    if (*s == '\\')		    {			k += 2;			if (*++s == '\\')			    ++k;		    }		}		j += k;		if (j > 80)		{		    if (!rflag) ++outline;		    putc('\n', output_file);		    j = k;		}		fprintf(output_file, "\"\\\"");		s = symnam[i];		while (*++s != '"')		{		    if (*s == '\\')		    {			fprintf(output_file, "\\\\");			if (*++s == '\\')			    fprintf(output_file, "\\\\");			else			    putc(*s, output_file);		    }		    else			putc(*s, output_file);		}		fprintf(output_file, "\\\"\",");	    }	    else if (s[0] == '\'')	    {		if (s[1] == '"')		{		    j += 7;		    if (j > 80)		    {			if (!rflag) ++outline;			putc('\n', output_file);			j = 7;		    }		    fprintf(output_file, "\"'\\\"'\",");		}		else		{		    k = 5;		    while (*++s != '\'')		    {			++k;			if (*s == '\\')			{			    k += 2;			    if (*++s == '\\')				++k;			}		    }		    j += k;		    if (j > 80)		    {			if (!rflag) ++outline;			putc('\n', output_file);			j = k;		    }		    fprintf(output_file, "\"'");		    s = symnam[i];		    while (*++s != '\'')		    {			if (*s == '\\')			{			    fprintf(output_file, "\\\\");			    if (*++s == '\\')				fprintf(output_file, "\\\\");			    else				putc(*s, output_file);			}			else			    putc(*s, output_file);		    }		    fprintf(output_file, "'\",");		}	    }	    else	    {		k = strlen(s) + 3;		j += k;		if (j > 80)		{		    if (!rflag) ++outline;		    putc('\n', output_file);		    j = k;		}		putc('"', output_file);		do { putc(*s, output_file); } while (*++s);		fprintf(output_file, "\",");	    }	}	else	{	    j += 2;	    if (j > 80)	    {		if (!rflag) ++outline;		putc('\n', output_file);		j = 2;	    }	    fprintf(output_file, "0,");	}    }    if (!rflag) outline += 2;    fprintf(output_file, "\n};\n");    FREE(symnam);    if (!rflag) ++outline;    fprintf(output_file, "char *%srule[] = {\n", symbol_prefix);    for (i = 2; i < nrules; ++i)    {	fprintf(output_file, "\"%s :", symbol_name[rlhs[i]]);	for (j = rrhs[i]; ritem[j] > 0; ++j)	{	    s = symbol_name[ritem[j]];	    if (s[0] == '"')	    {		fprintf(output_file, " \\\"");		while (*++s != '"')		{		    if (*s == '\\')		    {			if (s[1] == '\\')			    fprintf(output_file, "\\\\\\\\");			else			    fprintf(output_file, "\\\\%c", s[1]);			++s;		    }		    else			putc(*s, output_file);		}		fprintf(output_file, "\\\"");	    }	    else if (s[0] == '\'')	    {		if (s[1] == '"')		    fprintf(output_file, " '\\\"'");		else if (s[1] == '\\')		{		    if (s[2] == '\\')			fprintf(output_file, " '\\\\\\\\");		    else			fprintf(output_file, " '\\\\%c", s[2]);		    s += 2;		    while (*++s != '\'')			putc(*s, output_file);		    putc('\'', output_file);		}		else		    fprintf(output_file, " '%c'", s[1]);	    }	    else		fprintf(output_file, " %s", s);	}	if (!rflag) ++outline;	fprintf(output_file, "\",\n");    }    if (!rflag) outline += 2;    fprintf(output_file, "};\n#endif\n");}output_stype(){    if (!unionized && ntags == 0)    {	outline += 3;	fprintf(code_file, "#ifndef YYSTYPE\ntypedef int YYSTYPE;\n#endif\n");    }}output_trailing_text(){    register int c, last;    register FILE *in, *out;    if (line == 0)	return;    in = input_file;    out = code_file;    c = *cptr;    if (c == '\n')    {	++lineno;	if ((c = getc(in)) == EOF)	    return;	if (!lflag)	{	    ++outline;	    fprintf(out, line_format, lineno, input_file_name);	}	if (c == '\n')	    ++outline;	putc(c, out);	last = c;    }    else    {	if (!lflag)	{	    ++outline;	    fprintf(out, line_format, lineno, input_file_name);	}	do { putc(c, out); } while ((c = *++cptr) != '\n');	++outline;	putc('\n', out);	last = '\n';    }    while ((c = getc(in)) != EOF)    {	if (c == '\n')	    ++outline;	putc(c, out);	last = c;    }    if (last != '\n')    {	++outline;	putc('\n', out);    }    if (!lflag)	fprintf(out, line_format, ++outline + 1, code_file_name);}output_semantic_actions(){    register int c, last;    register FILE *out;    fclose(action_file);    action_file = fopen(action_file_name, "r");    if (action_file == NULL)	open_error(action_file_name);    if ((c = getc(action_file)) == EOF)	return;    out = code_file;    last = c;    if (c == '\n')	++outline;    putc(c, out);    while ((c = getc(action_file)) != EOF)    {	if (c == '\n')	    ++outline;	putc(c, out);	last = c;    }    if (last != '\n')    {	++outline;	putc('\n', out);    }    if (!lflag)	fprintf(out, line_format, ++outline + 1, code_file_name);}free_itemsets(){    register core *cp, *next;    FREE(state_table);    for (cp = first_state; cp; cp = next)    {	next = cp->next;	FREE(cp);    }}free_shifts(){    register shifts *sp, *next;    FREE(shift_table);    for (sp = first_shift; sp; sp = next)    {	next = sp->next;	FREE(sp);    }}free_reductions(){    register reductions *rp, *next;    FREE(reduction_table);    for (rp = first_reduction; rp; rp = next)    {	next = rp->next;	FREE(rp);    }}

⌨️ 快捷键说明

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