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

📄 m4y.y

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 Y
字号:
%{/*	@(#)m4y.y	1.2	*/extern long	evalval;#define	YYSTYPE	long%}%term DIGITS%left OROR%left ANDAND%left '|' '^'%left '&'%right '!' '~'%nonassoc GT GE LT LE NE EQ%left '+' '-'%left '*' '/' '%'%right POWER%right UMINUS%%s	: e	={ evalval = $1; }	|	={ evalval = 0; }	;e	: e OROR e	={ $$ = ($1!=0 || $3!=0) ? 1 : 0; }	| e ANDAND e	={ $$ = ($1!=0 && $3!=0) ? 1 : 0; }	| '!' e		={ $$ = $2 == 0; }	| '~' e		={ $$ = ~$2; }	| e EQ e	={ $$ = $1 == $3; }	| e NE e	={ $$ = $1 != $3; }	| e GT e	={ $$ = $1 > $3; }	| e GE e	={ $$ = $1 >= $3; }	| e LT e	={ $$ = $1 < $3; }	| e LE e	={ $$ = $1 <= $3; }	| e '|' e	={ $$ = ($1|$3); }	| e '&' e	={ $$ = ($1&$3); }	| e '^' e	={ $$ = ($1^$3); }	| e '+' e	={ $$ = ($1+$3); }	| e '-' e	={ $$ = ($1-$3); }	| e '*' e	={ $$ = ($1*$3); }	| e '/' e	={ $$ = ($1/$3); }	| e '%' e	={ $$ = ($1%$3); }	| '(' e ')'	={ $$ = ($2); }	| e POWER e	={ for ($$=1; $3-->0; $$ *= $1); }		| '-' e %prec UMINUS	={ $$ = $2-1; $$ = -$2; }	| '+' e %prec UMINUS	={ $$ = $2-1; $$ = $2; }	| DIGITS	={ $$ = evalval; }	;%%extern char *pe;yylex() {	while (*pe==' ' || *pe=='\t' || *pe=='\n')		pe++;	switch(*pe) {	case '\0':	case '+':	case '-':	case '/':	case '%':	case '^':	case '~':	case '(':	case ')':		return(*pe++);	case '*':		return(peek('*', POWER, '*'));	case '>':		return(peek('=', GE, GT));	case '<':		return(peek('=', LE, LT));	case '=':		return(peek('=', EQ, EQ));	case '|':		return(peek('|', OROR, '|'));	case '&':		return(peek('&', ANDAND, '&'));	case '!':		return(peek('=', NE, '!'));	default: {		register	base;		evalval = 0;		if (*pe == '0') {			if (*++pe=='x' || *pe=='X') {				base = 16;				++pe;			} else				base = 8;		} else			base = 10;		for (;;) {			register	c, dig;			c = *pe;			if (c>='0' && c<='9')				dig = c - '0';			else if (c>='a' && c<='f')				dig = c - 'a' + 10;			else if (c>='A' && c<='F')				dig = c - 'A' + 10;			else				break;			evalval = evalval*base + dig;			++pe;		}		return(DIGITS);	}	}}peek(c, r1, r2){	if (*++pe != c)		return(r2);	++pe;	return(r1);}/* VARARGS */yyerror() {;}

⌨️ 快捷键说明

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