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

📄 proctab.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <stdio.h>#include "awk.h"#include "y.tab.h"static char *printname[92] = {	(char *) "FIRSTTOKEN",	/* 57346 */	(char *) "PROGRAM",	/* 57347 */	(char *) "PASTAT",	/* 57348 */	(char *) "PASTAT2",	/* 57349 */	(char *) "XBEGIN",	/* 57350 */	(char *) "XEND",	/* 57351 */	(char *) "NL",	/* 57352 */	(char *) "ARRAY",	/* 57353 */	(char *) "MATCH",	/* 57354 */	(char *) "NOTMATCH",	/* 57355 */	(char *) "MATCHOP",	/* 57356 */	(char *) "FINAL",	/* 57357 */	(char *) "DOT",	/* 57358 */	(char *) "ALL",	/* 57359 */	(char *) "CCL",	/* 57360 */	(char *) "NCCL",	/* 57361 */	(char *) "CHAR",	/* 57362 */	(char *) "OR",	/* 57363 */	(char *) "STAR",	/* 57364 */	(char *) "QUEST",	/* 57365 */	(char *) "PLUS",	/* 57366 */	(char *) "AND",	/* 57367 */	(char *) "BOR",	/* 57368 */	(char *) "APPEND",	/* 57369 */	(char *) "EQ",	/* 57370 */	(char *) "GE",	/* 57371 */	(char *) "GT",	/* 57372 */	(char *) "LE",	/* 57373 */	(char *) "LT",	/* 57374 */	(char *) "NE",	/* 57375 */	(char *) "IN",	/* 57376 */	(char *) "ARG",	/* 57377 */	(char *) "BLTIN",	/* 57378 */	(char *) "BREAK",	/* 57379 */	(char *) "CLOSE",	/* 57380 */	(char *) "CONTINUE",	/* 57381 */	(char *) "DELETE",	/* 57382 */	(char *) "DO",	/* 57383 */	(char *) "EXIT",	/* 57384 */	(char *) "FOR",	/* 57385 */	(char *) "FUNC",	/* 57386 */	(char *) "SUB",	/* 57387 */	(char *) "GSUB",	/* 57388 */	(char *) "IF",	/* 57389 */	(char *) "INDEX",	/* 57390 */	(char *) "LSUBSTR",	/* 57391 */	(char *) "MATCHFCN",	/* 57392 */	(char *) "NEXT",	/* 57393 */	(char *) "NEXTFILE",	/* 57394 */	(char *) "ADD",	/* 57395 */	(char *) "MINUS",	/* 57396 */	(char *) "MULT",	/* 57397 */	(char *) "DIVIDE",	/* 57398 */	(char *) "MOD",	/* 57399 */	(char *) "ASSIGN",	/* 57400 */	(char *) "ASGNOP",	/* 57401 */	(char *) "ADDEQ",	/* 57402 */	(char *) "SUBEQ",	/* 57403 */	(char *) "MULTEQ",	/* 57404 */	(char *) "DIVEQ",	/* 57405 */	(char *) "MODEQ",	/* 57406 */	(char *) "POWEQ",	/* 57407 */	(char *) "PRINT",	/* 57408 */	(char *) "PRINTF",	/* 57409 */	(char *) "SPRINTF",	/* 57410 */	(char *) "ELSE",	/* 57411 */	(char *) "INTEST",	/* 57412 */	(char *) "CONDEXPR",	/* 57413 */	(char *) "POSTINCR",	/* 57414 */	(char *) "PREINCR",	/* 57415 */	(char *) "POSTDECR",	/* 57416 */	(char *) "PREDECR",	/* 57417 */	(char *) "VAR",	/* 57418 */	(char *) "IVAR",	/* 57419 */	(char *) "VARNF",	/* 57420 */	(char *) "CALL",	/* 57421 */	(char *) "NUMBER",	/* 57422 */	(char *) "STRING",	/* 57423 */	(char *) "REGEXPR",	/* 57424 */	(char *) "GETLINE",	/* 57425 */	(char *) "RETURN",	/* 57426 */	(char *) "SPLIT",	/* 57427 */	(char *) "SUBSTR",	/* 57428 */	(char *) "WHILE",	/* 57429 */	(char *) "CAT",	/* 57430 */	(char *) "NOT",	/* 57431 */	(char *) "UMINUS",	/* 57432 */	(char *) "POWER",	/* 57433 */	(char *) "DECR",	/* 57434 */	(char *) "INCR",	/* 57435 */	(char *) "INDIRECT",	/* 57436 */	(char *) "LASTTOKEN",	/* 57437 */};Cell *(*proctab[92])(Node **, int) = {	nullproc,	/* FIRSTTOKEN */	program,	/* PROGRAM */	pastat,	/* PASTAT */	dopa2,	/* PASTAT2 */	nullproc,	/* XBEGIN */	nullproc,	/* XEND */	nullproc,	/* NL */	array,	/* ARRAY */	matchop,	/* MATCH */	matchop,	/* NOTMATCH */	nullproc,	/* MATCHOP */	nullproc,	/* FINAL */	nullproc,	/* DOT */	nullproc,	/* ALL */	nullproc,	/* CCL */	nullproc,	/* NCCL */	nullproc,	/* CHAR */	nullproc,	/* OR */	nullproc,	/* STAR */	nullproc,	/* QUEST */	nullproc,	/* PLUS */	boolop,	/* AND */	boolop,	/* BOR */	nullproc,	/* APPEND */	relop,	/* EQ */	relop,	/* GE */	relop,	/* GT */	relop,	/* LE */	relop,	/* LT */	relop,	/* NE */	instat,	/* IN */	arg,	/* ARG */	bltin,	/* BLTIN */	jump,	/* BREAK */	closefile,	/* CLOSE */	jump,	/* CONTINUE */	awkdelete,	/* DELETE */	dostat,	/* DO */	jump,	/* EXIT */	forstat,	/* FOR */	nullproc,	/* FUNC */	sub,	/* SUB */	gsub,	/* GSUB */	ifstat,	/* IF */	sindex,	/* INDEX */	nullproc,	/* LSUBSTR */	matchop,	/* MATCHFCN */	jump,	/* NEXT */	jump,	/* NEXTFILE */	arith,	/* ADD */	arith,	/* MINUS */	arith,	/* MULT */	arith,	/* DIVIDE */	arith,	/* MOD */	assign,	/* ASSIGN */	nullproc,	/* ASGNOP */	assign,	/* ADDEQ */	assign,	/* SUBEQ */	assign,	/* MULTEQ */	assign,	/* DIVEQ */	assign,	/* MODEQ */	assign,	/* POWEQ */	printstat,	/* PRINT */	awkprintf,	/* PRINTF */	awksprintf,	/* SPRINTF */	nullproc,	/* ELSE */	intest,	/* INTEST */	condexpr,	/* CONDEXPR */	incrdecr,	/* POSTINCR */	incrdecr,	/* PREINCR */	incrdecr,	/* POSTDECR */	incrdecr,	/* PREDECR */	nullproc,	/* VAR */	nullproc,	/* IVAR */	getnf,	/* VARNF */	call,	/* CALL */	nullproc,	/* NUMBER */	nullproc,	/* STRING */	nullproc,	/* REGEXPR */	getline,	/* GETLINE */	jump,	/* RETURN */	split,	/* SPLIT */	substr,	/* SUBSTR */	whilestat,	/* WHILE */	cat,	/* CAT */	boolop,	/* NOT */	arith,	/* UMINUS */	arith,	/* POWER */	nullproc,	/* DECR */	nullproc,	/* INCR */	indirect,	/* INDIRECT */	nullproc,	/* LASTTOKEN */};char *tokname(int n){	static char buf[100];	if (n < FIRSTTOKEN || n > LASTTOKEN) {		sprintf(buf, "token %d", n);		return buf;	}	return printname[n-FIRSTTOKEN];}

⌨️ 快捷键说明

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