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

📄 calc.y

📁 含有BACKTARACKING的編譯軟體
💻 Y
字号:
%{# include <stdio.h># include <ctype.h>int regs[26];int base;%}%start list%token DIGIT LETTER%left '|'%left '&'%left '+' '-'%left '*' '/' '%'%left UMINUS   /* supplies precedence for unary minus */%% /* beginning of rules section */list  :  /* empty */      |  list stat '\n'      |  list error '\n'            {  yyerrok ; }      ;stat  :  expr            {  printf("%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; }      |  LETTER            {  $$ = regs[$1]; }      |  number      ;number:  DIGIT         {  $$ = $1; base = ($1==0) ? 8 : 10; }      |  number DIGIT         {  $$ = base * $1 + $2; }      ;%% /* start of programs */main (){    while(!feof(stdin)) {      yyparse();   }}yyerror(char *s){     fprintf(stderr, "%s\n", s);}yylex() {   /* lexical analysis routine */            /* returns LETTER for a lower case letter, yylval = 0 through 25 */            /* return DIGIT for a digit, yylval = 0 through 9 */            /* 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 + -