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

📄 11.txt

📁 用简单的YACC描述一个互交的计算器,该计算器有26个寄存器
💻 TXT
字号:
%{
#include<stdio.h>
#include<ctype.h>
int regs[26];
int bass;
%}
;%start list
%token DIGIT LETTER

%left '|'
%left '&'
%left '+''-'
%left '*''/''%'
%left UMINUS   /*SUPPLIES PRECEDE */
        /* FOR UNARY MINUS  */

%%  /*beginning of rules section */
?????
list : /*empty*/
  | list stat'\n'
  | list error'\n'
  { yyerrok ;}
  ;
start : expr
		{ ptrintf("%d\n",$1);}
		|LETTER'='expr
		{ regs[$1]=$3;}
		;
expr : '('expr')'
	   {  $$=$2;}
	   |expr'+'expr
	   {$$=$1+$3;}
	   |expr'-'expr
	   {$$=$1-$3;}
	   |expr'*'expr
	   {$$=$1*$3;}
	   |expr'/'expr
	   {$$=$1/$3;}
       |expr'%'expr
	   {$$=$1%$3;}
	   |expr'&'expr
	   {$$=$1&$3;}	   
	   |expr'|'expr
	   {$$=$1|$3;}
	   |'-'expr%prec UMINUS
	   {$$=-$2;}
	   |number
		   ;
number  : DIGIT
		  {$$=$1;base=($1==0?8:10;}
		  |number DIGIT
		  {$$=base*$1+$2;}
		  ;
%%  /*start of programs*/
yylex(){
	/*lexcial analysis routine*/
	/*return DIGIT for a digit,yylval=0
	  through 9*/
	/*return LETTER for a lower case letter,
	  yylval=0 through 25*/
	/*all other characters are
	returned immediately*/
	int c;
	while ((c=getchar())=='')
}/*skip blanks*/
/*c is now nonblank*/
if(islower(c)){
	yylval=c-'a';
	return(LETTER);
}
if (isdigit(c)){
	yylval=c-'0';
	return(DIGIT);
}
return(c);
}

⌨️ 快捷键说明

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