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

📄 syst_grammar.y

📁 c到DHL的转换工具
💻 Y
📖 第 1 页 / 共 2 页
字号:
/* file "syst_grammar.y" *//*  Copyright (c) 1994 Stanford University    All rights reserved.    This software is provided under the terms described in    the "suif_copyright.h" include file. */%{    #include <suif_copyright.h>    #include <suif1.h>      #include <suifmath.h>      #include <dependence.h>      #include "syst_calc.h" %}%union {    int val;    named_symcoeff_ineq * sc;    named_symcoeff_ineq_list * scl;    symrec * sym;    triplet * trp;    triplet_list * trplst;}    %token <val> NUM    %token <sc> INEQ       %token <sym> LVAR IVAR QVAR    %token ORDER    %token RENAME    %token CODE    %token IVALID    %token RVALID    %token PROJECT    %token SIMPLIFY    %token CONTAINED    %token MERGE    %token TEST    %token HELP     %token EXIT    %token END    %type  <val> assnum    %type  <val> snum    %type  <val> snum2    %type  <sc> exp     %type  <sc> compose    %type  <trp> coif1    %type  <trp> coifn    %type  <trplst> ineq1    %type  <trplst> ineqlist    %type  <trp> varlist    %type  <scl> mergelist    %left '{' '}'    %left '[' ']'    %left '>' '<' LEFTEQ    %right '='    %left '-' '+'    %left '*' '/'     %left '.'    %left '~'    %right '^'    /* Exponentiation        */    %left NEG     /* Negation--unary minus */     /* Grammar follows */          %% input:   /* empty */    | input line    ; line:       '\n'                          { if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                }  | '?' '\n'                      { print_help();                                     if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                                      }  | HELP '\n'                     { print_help();                                    if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                                       }  | EXIT '\n'                     { exit_calc(0);                        }  | '#' assnum '\n'                 { if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                }   | '#' exp '\n'                  { if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                }  | assnum '\n'                     { printf("%d\n", $1);                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }   | exp '\n'                      { $1->print_exp();                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | CODE '(' exp ')' '\n'         { do_print_code($3);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | exp '.' CODE '(' ')' '\n'     { do_print_code($1);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | CODE '(' exp snum snum ')' '\n'                                  { do_print_code($3, $4, $5);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | exp '.' CODE '(' snum snum ')' '\n'                                   { do_print_code($1, $5, $6);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | CODE '(' exp snum ')' '\n'                                  { do_print_code($3, $4);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | MERGE '(' snum ',' snum ',' mergelist ')'                                   {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         merge_and_print($3, $5, $7);                                     }                                     resetjmp();                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | MERGE '(' snum snum ',' mergelist ')'                                   {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         merge_and_print($3, $4, $6);                                     }                                     resetjmp();                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | MERGE '(' snum snum mergelist ')'                                   {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         merge_and_print($3, $4, $5);                                     }                                     resetjmp();                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | MERGE '(' snum ',' mergelist ')' {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         merge_and_print($3, -1, $5);                                     }                                        resetjmp();                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | MERGE '(' snum  mergelist ')' {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         merge_and_print($3, -1, $4);                                     }                                     resetjmp();                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | MERGE '(' mergelist ')'     {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         merge_and_print(-1, -1, $3);                                     }                                   resetjmp();                                    if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | exp '.' CODE '(' snum ')' '\n'                                   { do_print_code($1, $5);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | TEST '(' exp ')' '\n'         { do_test($3);                                     if(Files.eok()) {                                        printf(" > ");                                         fflush(stdout);                                    }                                }  | '<' LVAR '\n'                 { Files.push($2->nm());                                      if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                             }  | END '\n'                      { Files.pop();                                    if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                }  | error '\n'                    { yyerrok;                                     Files.endtab();                                                         if(Files.eok()) {                                       printf(" > ");                                        fflush(stdout);                                   }                                }     ; assnum: snum                     { $$ = $1;                             }  | snum2                         { $$ = $1;                             }  | IVAR                          { $$ = $1->get_int();                  }   | LVAR '=' snum                 { $$ = $3;                                     $1->set($3);                         }  | IVAR '=' snum                 { $$ = $3;                                     $1->set($3);                         }  | LVAR '=' snum2                { $$ = $3;                                     $1->set($3);                         }  | IVAR '=' snum2                { $$ = $3;                                     $1->set($3);                         }; snum: NUM                        { $$ = $1;                             }  | QVAR '[' snum ']' '[' snum ']'  '[' snum ']'                                  { named_symcoeff_ineq tmp($1->get_sc());                                    $$ = tmp[$3][$6][$9];                                }  | snum '+' snum                 { $$ = $1 + $3;                        }  | snum '-' snum                 { $$ = $1 - $3;                        }  | snum '*' snum                 { $$ = $1 * $3;                        }  | snum '/' snum                 { if(setjmp(Env) != 0)                                               ERR("div by 0?")                                    else                                         $$ = $1 / $3;                                     resetjmp();                          }  | '(' snum ')'                  { $$ = $2;                             }  | '^' '(' exp ')'               {  if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         $$ = ~(*$3);                                     }                                     resetjmp();                                }  | '(' exp '<' '<' exp  ')'                                   { if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         $$ = (*$2) << (*$5);                                     }                                     resetjmp();                                }  | '(' exp '>' '>' exp ')'                                   { if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         $$ = (*$2) >> (*$5);                                     }                                     resetjmp();                                } ; snum2:      RVALID '(' exp ')'                                                { if(setjmp(Env) != 0)                                               ERR("invalid")                                     else {                                         $$ = (~(*$3) == FALSE);                                     }                                     resetjmp();                                }    

⌨️ 快捷键说明

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