亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? formula.c

?? 一個簡單的解析器
?? C
?? 第 1 頁 / 共 3 頁
字號:
      	                break;

                   case '(':
      	                rule->str[i++] = 'O';
      	                bp++;
      	                par1++;

      	                break;

                   case ')':
      	                if  (par1 == 0)
      	                    {
      	                    ERROR9;
      	                    return (9);
      	                    }

      	                rule->str[i++] = '$';
      	                bp++;
      	                par1--;

      	                break;

                   case '[':
      	                rule->str[i++] = 'P';
      	                bp++;
      	                par2++;

      	                break;

                   case ']':
      	                if  (par2 == 0)
      	                    {
      	                    ERROR9;
      	                    return (9);
      	                    }

      	                rule->str[i++] = 'Q';
      	                bp++;
      	                par2--;

      	                break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 其他字符 */
                   default:
                        printf("第 %d 行:無效字符\n", line);
                        return (7);

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

                   } /* End of switch */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

            } /* End of 公式行解析 */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      if  (if_goto_flag == 1)
          {
          printf("第 %d 行:if....goto 語句錯\n", line);
          return (2);
          }

      if  (par1 != 0 || par2 != 0)
          {
          ERROR9;
          return (9);
          }

      /* 加公式語句結束符 'T' */
      if  (rule->str[i-1] != 'T' && if_goto_flag == 0)
          rule->str[i++] = 'T';
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

      } /* End of 規則文件 */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* 去掉最后一行的 'T' 并加規則結束符 */
while (rule->str[--i] == 'T');
rule->str[++i] = 0xFF;
rule->str[++i] = '\0';

if  (i >= RULE_STR_SIZE)
    {
    printf("第 %d 行:規則文件超長\n", line);
    return (11);
    }

return (0);
}

/*****************************************************************************
 Function: int Formula(RULE *rule, FIELD *Xarray, FIELD *Yarray)

 Purpose : 解釋執行規則。

           規則由用 T 分隔的語句組成。
           規則用 0xFF 跟以 '\0' 結尾。

           “標號:”標記的位置已存放在 rule->addr[i] 中。

           數值常量已存放在 rule->num[i] 中,在規則串中用 ? 跟隨以一字節的
           下標表示。

           變量作為賦值對象時用 U,V,W 表示,規則串中沒有等號,解析時應向符
           號堆棧中壓入等號;其他情形X,Y,Z 表示;都跟隨以一字節的下標。

           函數名改為用 @ 跟以二位 ASCII 碼字符表示(低位在前)。

 Input   : 運算規則指針 rule,
           數據域數組 Xarray, 用于存放輸入數據。
           數據域數組 Yarray, 用于存放各返回值。

 Return  : 返回 0,出錯時返回非零的錯誤代碼。

 Modify  : 可能修改了 Xarray、Yarray 數組各成員的值。

 Remark  : 中間變量數組 Zarray。

                                一、公式內部符號表
———————————————————————————————————————
級別    符號                                  說明                    ASCII 碼
———————————————————————————————————————
        "                                     字符串界定符                  34
———————————————————————————————————————
        $                                     右園括號                      36
———————————————————————————————————————
        ?                                     數值常量                      63
———————————————————————————————————————
  1     @                                     函數(邏輯非已改為函數)        64
———————————————————————————————————————
  2     A~*  B~/                              算術乘除                  65  66
———————————————————————————————————————
  3     C~+  D~-                              算術加減                  67  68
———————————————————————————————————————
  4     E~<  F~<=  G~>  H~>=  I~==  J~!=      算術比較  69  70  71  72  73  74
———————————————————————————————————————
  5     K~&                                   邏輯與                        75
———————————————————————————————————————
  6     L~|                                   邏輯或                        76
———————————————————————————————————————
  7     M~=                                   賦值符                        77
———————————————————————————————————————
  8     N~?  N~:  N~,                         條件運算符,函數參數分隔符    78
———————————————————————————————————————
  9     O~(  P~[                              左括號                    79  80
———————————————————————————————————————
        Q~]                                   右方括號                      81
———————————————————————————————————————
        R                                     公式結果為真跳轉              82
———————————————————————————————————————
        S                                     無條件跳轉到標號              83
———————————————————————————————————————
        T                                     公式語句結束符                84
———————————————————————————————————————
        U                                     x 作為賦值對象時              85
———————————————————————————————————————
        V                                     y 作為賦值對象時              86
———————————————————————————————————————
        W                                     z 作為賦值對象時              87
———————————————————————————————————————
        X                                     x 變量                        88
———————————————————————————————————————
        Y                                     y 變量                        89
———————————————————————————————————————
        Z                                     z 變量                        90
———————————————————————————————————————

二、錯誤代碼:
    n...第 n 號函數執行錯誤

 *****************************************************************************/
int Formula(RULE *rule, FIELD *Xarray, FIELD *Yarray)
{
SIGN      	    *ps;                    /* 符號堆棧指針 */
SIGN            sign[STACK_SIZE];       /* 符號堆棧 */
SIGN            next;                   /* 臨時存放雙目運算符 */

PACK            pack;                   /* 運算堆棧及變量 */

FIELD           sta[STACK_SIZE];        /* 運算堆棧 */
FIELD           *pfield[16];            /* 賦值堆棧 */
FIELD           Zarray[Zarray_SIZE];    /* 臨時變量 */

unsigned char 	*str, *cp;
short           i;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
str = rule->str;

ps = sign;
pack.sp = sta;
pack.vp = pfield;

pack.px = Xarray;
pack.py = Yarray;
pack.pz = Zarray;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while (*str != 0xFF)
      {
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 判斷屬于 16 類情形中的那一類 */
      if  (*str <= 81)
          {
          if  (*str <= 64)
              {
              if  (*str <= 36)
                  {
                  if  (*str == 34)
                      goto ASC34;
                  else
                      goto ASC36;
                  }
              else
                  {
                  if  (*str == 63)
                      goto ASC63;
                  else
                      goto ASC64;
                  }
              }
          else
              {
              if  (*str <= 78)
                  {
                  if  (*str <= 76)
                      goto ASC65_76;
                  else
                      goto ASC78;
                  }
              else
                  {
                  if  (*str <= 80)
                      goto ASC79_80;
                  else
                      goto ASC81;
                  }
              }
          }
      else
          {
          if  (*str <= 86)
              {
              if  (*str <= 84)
                  {
                  if  (*str <= 83)
                      goto ASC82_83;
                  else
                      goto ASC84;
                  }
              else
                  {
                  if  (*str == 85)
                      goto ASC85;
                  else
                      goto ASC86;
                  }
              }
          else
              {
              if  (*str <= 88)
                  {
                  if  (*str == 87)
                      goto ASC87;
                  else
                      goto ASC88;
                  }
              else
                  {
                  if  (*str == 89)
                      goto ASC89;
                  else
                      goto ASC90;
                  }
              }
          }

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 雙引號 '"', 字符串常量, 壓入字符串堆棧 */
      ASC34:

      cp = pack.sp->str;
      pack.sp->type = STRING;
      (pack.sp)++;

      str++;    /* 跳過引號 */
      while (*str != '"')
            *cp++ = *str++;

      *cp = '\0';
      str++;    /* 跳過引號 */

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 右園括號 $~), 不壓入符號堆棧 */
      ASC36:

      str++;

      /* 處理前面所有運算符直至左園括號 */
      while (ps > sign && (ps-1)->op != 79)
            {
            ps--;
            Calc[ps->op - 65].addr(&pack);
            }

      ps--;     /* 將左括號從堆棧中彈出 */

      /* 左括號前是否有函數 */
      if  (ps > sign && (ps-1)->level == 1)
          {
          ps--;
          if  (Fun[ps->op].addr(&pack))
              {
              printf("第 %d 號函數執行錯誤\n", ps->op);
              return (ps->op);
              }
          }

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 數值常量 ?, 壓入數值堆棧 */
      ASC63:

      str++;
      pack.sp->num = rule->num[*str++];
      pack.sp->type = NUMBER;
      (pack.sp)++;

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 函數 @, 壓入符號堆棧 */
      ASC64:

      str++;

      ps->op = *str++;
      i = *str++;
      ps->op |= (i << 8);

      ps->level = 1;
      ps++;

      /* O~(, 壓入符號堆棧 */
      ps->op = *str++;
      ps->level = 9;
      ps++;

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* 雙目運算符 A~* B~/ C~+ D~- E~< F~<= G~> H~>= I~== J~!= K~& L~|*/
      ASC65_76:

      next.op = *str++;
      next.level = Level[next.op - 65];

      /* 處理此前級別不高于此級別的所有運算符 */
      while (ps > sign && (ps-1)->level <= next.level)
            {
            ps--;
            Calc[ps->op - 65].addr(&pack);
            }

      /* 將新的雙目運算符壓入符號堆棧 */
      *ps++ = next;

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 分隔符 N~?~:~',' 都不壓入符號堆棧 */
      ASC78:

      str++;

      /* 處理前面所有小級別運算符 */
      while (ps > sign && (ps-1)->level < 8)
            {
            ps--;
            Calc[ps->op - 65].addr(&pack);
            }

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 雙目定界符左括號 O~(, P~[, 壓入符號堆棧 */
      ASC79_80:

      ps->op = *str++;
      ps->level = 9;
      ps++;

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 雙目定界符右方括號 Q~], 不壓入符號堆棧 */
      ASC81:

      str++;

      /* 處理前面所有運算符直至左方括號 */
      while (ps > sign && (ps-1)->op != 80)
            {
            ps--;
            Calc[ps->op - 65].addr(&pack);
            }

      ps--;     /* 將左括號從堆棧中彈出 */

      /* 進行條件運算 */
      pack.sp -= 3;
      if  ((pack.sp + 1)->type)
          {
          pack.sp->num = ((int)(pack.sp->num)) ? (pack.sp + 1)->num : (pack.sp + 2)->num;
          (pack.sp)++;
          }
      else
          {
          /* 字符串條件運算 */
          if  ((int)pack.sp->num)
              strcpy(pack.sp->str, (pack.sp + 1)->str);
          else
              strcpy(pack.sp->str, (pack.sp + 2)->str);

          pack.sp->type = STRING;
          (pack.sp)++;
          }

      continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      /* 條件跳轉 R, 絕對跳轉 S */
      ASC82_83:

      /* 處理所有未處理的運算符 */
      while (ps > sign)
            {
            ps--;
            Calc[ps->op - 65].addr(&pack);
            }

      if  (*str++ == 'R')
          {
          /* 條件跳轉 */
          (pack.sp)--;

          if  (pack.sp->num)
              str = rule->str + rule->addr[*str];
          else
              str++;
          }
      else
          str = rule->str + rule->addr[*str];         /* 絕對跳轉 */

      ps = sign;
      pack.sp = sta;
      pack.vp = pfield;

      continue;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区在线观看免费观看电影高清| 亚洲主播在线观看| 成人av电影在线播放| 亚洲高清久久久| 亚洲欧洲www| 日韩你懂的在线观看| 91在线视频在线| 激情综合一区二区三区| 亚洲图片欧美视频| 欧美国产精品劲爆| 日韩美女视频一区二区在线观看| 一本色道亚洲精品aⅴ| 国产黑丝在线一区二区三区| 日本特黄久久久高潮| 亚洲一区二区三区中文字幕在线| 国产精品污污网站在线观看| 精品免费视频一区二区| 欧美优质美女网站| 成人av在线一区二区| 韩国视频一区二区| 日韩av一区二区在线影视| 亚洲综合一区二区精品导航| 亚洲婷婷综合久久一本伊一区| 久久免费精品国产久精品久久久久 | 26uuu精品一区二区三区四区在线| 色婷婷综合五月| 91在线视频18| 99国产精品久久久久久久久久 | 不卡一区二区三区四区| 国产中文字幕精品| 久久99在线观看| 男人的天堂久久精品| 视频在线观看91| 亚洲成人免费视| 亚洲国产精品综合小说图片区| 国产精品福利一区| 国产精品久久毛片| 中文字幕在线不卡国产视频| 国产精品免费人成网站| 亚洲国产精品精华液2区45| 国产日韩欧美a| 国产精品久久久久久久久免费樱桃 | 亚洲永久精品大片| 亚洲欧美激情视频在线观看一区二区三区| 中文成人av在线| 国产精品视频线看| 国产精品超碰97尤物18| 国产精品久久久一本精品| 日韩一区日韩二区| 一区二区三区欧美日| 亚洲制服丝袜一区| 婷婷国产v国产偷v亚洲高清| 日韩精品五月天| 国内精品国产成人国产三级粉色 | 色94色欧美sute亚洲13| 欧美亚洲国产怡红院影院| 91成人在线观看喷潮| 91成人网在线| 欧美一区国产二区| 精品国产伦一区二区三区免费 | 欧美一级精品在线| 精品福利av导航| 中文av一区特黄| 亚洲一区电影777| 免费观看在线综合色| 国产精品一区二区男女羞羞无遮挡| 国产一区二区成人久久免费影院| 成人久久视频在线观看| 欧美亚洲另类激情小说| 日韩亚洲电影在线| 国产女同互慰高潮91漫画| 亚洲视频你懂的| 天天操天天干天天综合网| 狠狠狠色丁香婷婷综合激情| av一区二区久久| 欧美日韩一区二区不卡| 精品国产一区二区三区av性色| 亚洲国产成人在线| 性做久久久久久久免费看| 久久 天天综合| 91麻豆高清视频| 欧美电影免费观看高清完整版在| 国产精品天干天干在线综合| 亚洲国产精品尤物yw在线观看| 精品综合久久久久久8888| 不卡欧美aaaaa| 欧美一级久久久久久久大片| 国产精品久久久久影院| 蜜臀国产一区二区三区在线播放| 顶级嫩模精品视频在线看| 欧美男同性恋视频网站| 中文字幕不卡在线| 亚洲gay无套男同| 国产成人在线视频网址| 欧美日韩国产首页在线观看| 欧美激情在线免费观看| 美腿丝袜亚洲色图| 91麻豆免费看| 欧美高清一级片在线观看| 日韩国产精品久久| 91丨porny丨国产入口| 欧美tickling挠脚心丨vk| 一区二区三区精密机械公司| 国内精品写真在线观看| 69av一区二区三区| 亚洲少妇中出一区| 国产盗摄一区二区| 日韩欧美国产三级电影视频| 夜夜精品视频一区二区| 成人av影院在线| 久久日一线二线三线suv| 石原莉奈一区二区三区在线观看 | 在线观看一区二区视频| 精品国产在天天线2019| 日韩精品三区四区| 精品视频一区 二区 三区| 亚洲女爱视频在线| 成人手机在线视频| 欧美精品一区二区三区在线播放| 三级一区在线视频先锋| 一本色道久久综合亚洲aⅴ蜜桃| 久久久久久99精品| 久久99国产精品成人| 日韩欧美自拍偷拍| 日产国产欧美视频一区精品| 欧美日韩免费一区二区三区视频| 自拍视频在线观看一区二区| a4yy欧美一区二区三区| 国产精品久久福利| 国产精品中文字幕一区二区三区| 欧美一级免费观看| 日本欧美一区二区| 欧美精品v日韩精品v韩国精品v| 亚洲大型综合色站| 欧美日韩一级黄| 午夜激情综合网| 欧美精品丝袜中出| 青青草伊人久久| 日韩视频在线永久播放| 另类小说一区二区三区| www精品美女久久久tv| 国产高清精品在线| 国产精品国产三级国产普通话三级| 成人av免费在线观看| 亚洲天堂2014| 在线免费观看一区| 亚洲高清不卡在线| 欧美一区二区三区小说| 另类小说综合欧美亚洲| 久久久国产综合精品女国产盗摄| 国产成人午夜精品影院观看视频| 中国av一区二区三区| 色婷婷狠狠综合| 秋霞成人午夜伦在线观看| 精品日韩一区二区三区| 国产精品一区专区| 中文字幕日韩欧美一区二区三区| 91浏览器在线视频| 亚洲成人久久影院| 欧美成人精品福利| 国产精品白丝av| 国产精品久久久久aaaa| 日本精品一区二区三区高清| 亚洲国产欧美另类丝袜| 日韩三级免费观看| 国产精品一区三区| 亚洲免费大片在线观看| 欧美一区二区三区视频在线 | 欧美日韩在线播放一区| 蜜臀av性久久久久av蜜臀妖精| 久久久精品影视| 在线观看一区不卡| 美女在线视频一区| 国产精品三级视频| 欧美日韩国产首页| 国产麻豆成人精品| 尤物在线观看一区| 精品国产免费人成在线观看| 91免费小视频| 经典三级一区二区| 亚洲免费大片在线观看| 精品国产一区二区三区久久影院| av在线不卡网| 麻豆久久久久久| 洋洋成人永久网站入口| 日韩色在线观看| 一本久久综合亚洲鲁鲁五月天 | 91日韩一区二区三区| 午夜精品福利久久久| 国产日韩三级在线| 欧美日韩高清不卡| av成人免费在线观看| 久久99精品久久只有精品| 一区二区三区欧美激情| 久久综合九色欧美综合狠狠 | 91啪九色porn原创视频在线观看| 麻豆成人久久精品二区三区红| 成人免费一区二区三区在线观看| 日韩午夜三级在线| 欧美中文字幕亚洲一区二区va在线|