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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? formula.c

?? 一個簡單的解析器
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***************************************
 Filename : formula.c
 Version  : Formula Language V1.1
 Author   : Shen Tu Hongnan
 Modify   :
 Date     : 2001/08/26
 Remark   :
 ***************************************/

#define UNIX

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <fcntl.h>
#include <stdarg.h>
#include <time.h>

#ifdef UNIX
    #include <sys/types.h>
    #include <sys/times.h>
#endif

#include    "formula.h"

//#include    "d:\mds\formula.h"

/*************************************************************************/
/* 堆棧及變量 */
typedef struct  {
        FIELD   *sp;                            /* 運算堆棧指針 */
        FIELD   **vp;                           /* 賦值堆棧指針 */
        FIELD   *px;                            /* 輸入變量組 */
        FIELD   *py;                            /* 輸出變量組 */
        FIELD   *pz;                            /* 臨時變量組 */
        } PACK;

/* 函數(shù)名,函數(shù)指針 */
typedef struct {
        char   name[16];
        int    (*addr)(PACK *pp);
        } FUN_LIST;

/* 運算符號 */
typedef struct  {
        int     op;                             /* 操作符 */
        short   level;                          /* 優(yōu)先級 */
        } SIGN;

extern int      MaxFun;
extern FUN_LIST Fun[];

//#include    "d:\mds\function.c"

/*****************************************************************************/
static void Calc65(PACK *pp);
static void Calc66(PACK *pp);
static void Calc67(PACK *pp);
static void Calc68(PACK *pp);
static void Calc69(PACK *pp);
static void Calc70(PACK *pp);
static void Calc71(PACK *pp);
static void Calc72(PACK *pp);
static void Calc73(PACK *pp);
static void Calc74(PACK *pp);
static void Calc75(PACK *pp);
static void Calc76(PACK *pp);
static void Calc77(PACK *pp);

typedef struct {
        void   (*addr)(PACK *pp);
        } OPERATION;

static OPERATION Calc[13] = {
                 {Calc65,},
                 {Calc66,},
                 {Calc67,},
                 {Calc68,},
                 {Calc69,},
                 {Calc70,},
                 {Calc71,},
                 {Calc72,},
                 {Calc73,},
                 {Calc74,},
                 {Calc75,},
                 {Calc76,},
                 {Calc77,},
                 };

static short Level[12] = {2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5, 6};
/*65* ,66/,67+,68-,69<,70<=,71>,72>=,73==,74!=,75&&,76||,77=*/
/*************************************************************************
 Function: ReadRuleFile()
 Purpose : 從規(guī)則文件中讀入公式行到運算規(guī)則 rule 中。
 Input   : 規(guī)則文件指針 fp,規(guī)則指針 rule。
 Return  : 返回 0,出錯時返回非零的錯誤代碼。
 Modify  : 無
 Remark  : 對公式語言進行了預(yù)編譯
           錯誤代碼:
           1...函數(shù)名錯
           2...if....goto 語句錯
           3...goto 語句錯
           4...賦值表達式錯
           5...下標(biāo)超出范圍
           6...標(biāo)號錯誤
           7...無效字符
           8...邏輯非對象缺少括號
           9...配對符號錯誤
          10...常數(shù)太多
          11...規(guī)則文件超長
 *************************************************************************/

#define ERROR5  printf("第 %d 行:下標(biāo)超出范圍\n", line)
#define ERROR9  printf("第 %d 行:配對符號錯誤\n", line)

/*****************************************************************************/
int ReadRuleFile(FILE *fp, RULE *rule)
{
int     i = 0, np = 0, line = 0, par1 = 0, par2 = 0;
int     j, k, n, m, if_goto_flag;
char    *bp, *tp;
char    buf[256], tmp[64];

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while (fgets(buf, sizeof(buf), fp) != (char *)NULL)
      {

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      line++;

      /* 注釋行或空行,忽略 */
      if  (*buf == '#' || *buf == '\n' || *buf == '\0')
          continue;

      /* 解析公式行 */
      bp = buf;
      if_goto_flag = 0;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
      while (*bp != '\n' && *bp != '\0')
            {

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
            /* # 號后為注釋,忽略 */
            if  (*bp == '#')
                break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
            /* 數(shù)值常量 */
            if  (isdigit(*bp) || *bp == '.')
                {
                if  (np >= 256)
                    {
                    printf("第 %d 行:常數(shù)太多\n", line);
                    return (10);
                    }

                /* 將常數(shù)串移入 tmp */
                tp = tmp;

                do {
                   *tp++ = *bp++;
                   } while (isdigit(*bp) || *bp == '.');

                *tp = '\0';

                /* 設(shè)置規(guī)則串并將值保存 */
                rule->str[i++] = '?';
                rule->str[i++] = np & 0x00FF;
                rule->num[np++] = atof(tmp);

                continue;
                }

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
            /* 大寫字母開頭的為函數(shù)名 */
            if  (isupper(*bp))
                {
                /* 取函數(shù)名 */
                tp = tmp;

                while (*bp != '(')
                      *tp++ = *bp++;

                *tp = '\0';

                /* 查找函數(shù)在數(shù)組中的下標(biāo) */
                n = 1;
                m = MaxFun;

                while (n <= m)
                      {
                      j = (m + n)/2;
                      if  ((k = strcmp(tmp, Fun[j].name)) == 0)
                          break;

                      if  (k > 0)
                          n = j + 1;
                      else
                          m = j - 1;
                      }

                if  (k != 0)
                    {
                    printf("第 %d 行:錯誤的函數(shù)名\n", line);
                    return (1);
                    }

                /* 置內(nèi)部函數(shù)名 */
                rule->str[i++] = '@';
                rule->str[i++] = j & 0x00FF;
                rule->str[i++] = (j >> 8) & 0x00FF;

                continue;
                }

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
            /* 其他情形的解析 */
            switch (*bp)
                   {

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 空白字符,忽略 */
                   case ' ':
                   case '\t':
                        bp++;
                        break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 字符串常量 */
                   case '"':
                        rule->str[i++] = *bp++;
                        while ((rule->str[i++] = *bp++) != '"');

                        continue;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* if 語句,置 if_goto_flag 標(biāo)志 */
                   case 'i':
                        bp++;
                        if  (*bp++ == 'f' && if_goto_flag == 0)
                            if_goto_flag = 1;
                        else
                            {
                            printf("第 %d 行:if....goto 語句錯\n", line);
                            return (2);
                            }

                        break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* goto 語句 */
                   case 'g':
                        bp++;
                        if  (*bp++ != 'o' || if_goto_flag == 2)
                            {
                            printf("第 %d 行:goto 語句錯\n", line);
                            return (3);
                            }

                        while (islower(*bp) || *bp == ' ' || *bp == '\t')
                              bp++;

                        /* goto 后面沒有標(biāo)號 */
                        if  (*bp++ != '@')
                            {
                            printf("第 %d 行:goto 語句錯\n", line);
                            return (3);
                            }

                        /* R 條件轉(zhuǎn)移,S 絕對轉(zhuǎn)移 */
                        if  (if_goto_flag)
                            rule->str[i++] = 'R';
                        else
                            rule->str[i++] = 'S';

                        if_goto_flag = 2;

                        /* 計算標(biāo)號 */
                        j = 0;
                        while (isdigit(*bp))
                              j = 10*j + *bp++ - 48;

                        if  (j >= RULE_ADDR_SIZE)
                            {
                            ERROR5;
                            return (5);
                            }

                        rule->str[i++] = j;

                        break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 變量 */
                   case 'x':
                   case 'y':
                   case 'z':
                        /* 改為大寫字母 */
                        rule->str[i++] = *bp++ - 32;

                        /* 確定下標(biāo) */
                        j = 0;
                        while (isdigit(*bp))
                              j = 10*j + *bp++ - 48;

                        if  (j >= 256 || (rule->str[i-1] == 'Z' && j >= Zarray_SIZE))
                            {
                            ERROR5;
                            return (5);
                            }

                        rule->str[i++] = j;

                        /* 賦值對象,XYZ 改為UVW,并且跳過等號 */
                        while (*bp == ' ' || *bp == '\t')
                              bp++;

                        if  (*bp == '=' && *(bp+1) != '=')
                            {
                            rule->str[i-2] -= 3;
                            bp++;
                            }

                        break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 標(biāo)號 */
                   case '@':
                        /* 取數(shù)字串 */
                        bp++;

                        j = 0;
                        while (isdigit(*bp))
                              j = 10*j + *bp++ - 48;

                        if  (j >= RULE_ADDR_SIZE)
                            {
                            ERROR5;
                            return (5);
                            }

                        while (*bp == ' ' || *bp == '\t') bp++;
                        if  (*bp++ != ':')
                            {
                            printf("第 %d 行:標(biāo)號錯誤\n", line);
                            return (6);
                            }

                        /* 置跳轉(zhuǎn)地址 */
                        rule->addr[j] = i;

                        break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 運算符 */
                   case '*':
      	                rule->str[i++] = 'A';
      	                bp++;

      	                break;

                   case '/':
      	                rule->str[i++] = 'B';
      	                bp++;

      	                break;

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

      	                break;

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

      	                break;

                   /* <, <= */
                   case '<':
                        rule->str[i++] = 'E';
                        if  (*(++bp) == '=')
                            {
                            bp++;
                            rule->str[i-1] = 'F';
                            }

                        break;

                   /* >, >= */
                   case '>':
                        rule->str[i++] = 'G';
                        if  (*(++bp) == '=')
                            {
                            bp++;
                            rule->str[i-1] = 'H';
                            }

                        break;

                   /* == */
                   case '=':
                        rule->str[i++] = 'I';
                        bp++;

                        if  (*bp++ != '=')
                            {
                            printf("第 %d 行:賦值表達式錯\n", line);
                            return (4);
                            }

                        break;

                   /* !, != */
                   case '!':
                        if  (*(++bp) == '=')
                            {
                            bp++;
                            rule->str[i++] = 'J';
                            }
                        else
                            {
                            rule->str[i++] = '@';
                            rule->str[i++] = 0;
                            rule->str[i++] = 0;

                            while (*bp == ' ' || *bp == '\t') bp++;
                            if  (*bp != '(')
                                {
                                printf("第 %d 行:邏輯非對象缺少括號\n", line);
                                return (8);
                                }
                            }

                        break;

                   /* && */
                   case '&':
                        rule->str[i++] = 'K';
                        if  (*(++bp) == '&')
                            bp++;

                        break;

                   /* || */
                   case '|':
                        rule->str[i++] = 'L';
                        if  (*(++bp) == '|')
                            bp++;

                        break;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
                   /* 分隔符及括號 */
                   case '?':
                   case ':':
                   case ',':
      	                rule->str[i++] = 'N';
      	                bp++;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成小说网站色在线| 国产精品一区二区免费不卡| 亚洲激情欧美激情| 亚洲视频一区二区在线观看| 亚洲同性同志一二三专区| 国产精品初高中害羞小美女文| 国产偷国产偷精品高清尤物 | 777久久久精品| 欧美日韩国产精品自在自线| 欧美三级乱人伦电影| 欧美精品一级二级三级| 日韩午夜精品电影| 精品对白一区国产伦| 国产日韩成人精品| 中文字幕一区二区三| 一区二区三区欧美激情| 图片区小说区区亚洲影院| 免费xxxx性欧美18vr| 久久福利视频一区二区| 国产黄色精品网站| 91亚洲精品久久久蜜桃| 欧美中文一区二区三区| 制服.丝袜.亚洲.另类.中文| 欧美精品一区二区蜜臀亚洲| 亚洲国产成人自拍| 亚洲一区二区五区| 久久se精品一区二区| 国产福利精品导航| 色先锋aa成人| 欧美群妇大交群中文字幕| 精品美女一区二区三区| 中文字幕国产一区| 午夜精品福利视频网站| 极品美女销魂一区二区三区| 成人黄色小视频| 欧美日韩中字一区| 久久男人中文字幕资源站| 亚洲免费观看高清完整版在线观看熊 | 国产成人在线观看| 色综合中文字幕| 日韩免费视频线观看| 国产精品久久久久aaaa| 婷婷中文字幕综合| 国产精品一区二区久久不卡| 在线一区二区三区四区| 久久女同互慰一区二区三区| 亚洲自拍欧美精品| 国产成人午夜片在线观看高清观看| 一本色道综合亚洲| 精品国产一区久久| 一区二区三区在线免费视频| 久久99精品久久久久| 色播五月激情综合网| 欧美成人a∨高清免费观看| 亚洲欧美精品午睡沙发| 九九精品视频在线看| 欧美主播一区二区三区美女| 久久综合丝袜日本网| 亚洲国产日韩精品| 成人av网址在线| 欧美xxxxxxxx| 亚洲国产精品天堂| 不卡av在线网| 久久影院午夜片一区| 偷窥少妇高潮呻吟av久久免费| 成人av网站在线| 久久噜噜亚洲综合| 日本不卡免费在线视频| 在线精品国精品国产尤物884a| 国产日产欧美精品一区二区三区| 午夜精品久久久久久| 色综合网站在线| 国产精品女同一区二区三区| 国内外成人在线| 国产精品欧美经典| 老司机精品视频在线| 欧美日韩午夜在线视频| 亚洲人精品午夜| 国产aⅴ综合色| 26uuu精品一区二区| 男男成人高潮片免费网站| 欧美性受xxxx黑人xyx| 亚洲婷婷国产精品电影人久久| 国产精品综合二区| 久久夜色精品一区| 裸体歌舞表演一区二区| 3d成人h动漫网站入口| 亚洲一区精品在线| 日本电影亚洲天堂一区| 中文字幕一区视频| 懂色av中文一区二区三区| 久久久久国产一区二区三区四区| 麻豆精品精品国产自在97香蕉 | 亚洲一区二区三区不卡国产欧美 | 日韩你懂的在线观看| 热久久免费视频| 欧美一区二区福利在线| 免费国产亚洲视频| 日韩一区二区在线免费观看| 日本va欧美va欧美va精品| 欧美一级黄色片| 麻豆精品视频在线| 精品盗摄一区二区三区| 精品无人码麻豆乱码1区2区| 精品sm捆绑视频| 国产又黄又大久久| 国产校园另类小说区| 成人a区在线观看| 亚洲视频在线观看一区| 91福利视频网站| 亚洲二区在线视频| 日韩一区二区三| 美女一区二区在线观看| 精品国产91久久久久久久妲己| 国产一区二区视频在线播放| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲四区在线观看| 色综合久久久网| 亚洲国产精品一区二区www| 6080国产精品一区二区| 国内精品免费在线观看| 亚洲国产精品t66y| 欧美综合视频在线观看| 视频一区二区三区入口| 精品美女被调教视频大全网站| 国产精品一级黄| 亚洲男人天堂av| 欧美福利视频导航| 激情久久久久久久久久久久久久久久| 国产日韩影视精品| 日本高清视频一区二区| 免费xxxx性欧美18vr| 久久一区二区视频| 99国产精品99久久久久久| 亚洲大片精品永久免费| 精品福利在线导航| 成人在线视频一区| 亚洲电影一级片| 精品日韩一区二区三区免费视频| 成人黄色一级视频| 丝袜脚交一区二区| 国产区在线观看成人精品| 欧美自拍偷拍一区| 国产主播一区二区| 亚洲精品视频在线观看网站| 日韩一区二区三区三四区视频在线观看| 国产又黄又大久久| 亚洲国产视频一区二区| 久久日韩粉嫩一区二区三区 | 国产精品萝li| 欧美女孩性生活视频| 国产黄色91视频| 日韩电影在线观看网站| 中文字幕成人网| 91精品国产综合久久福利| 成人动漫精品一区二区| 色综合 综合色| 美国毛片一区二区| 亚洲另类色综合网站| 精品久久久久久亚洲综合网| 色婷婷av一区| 国产在线一区二区| 亚洲狠狠爱一区二区三区| 中文av一区二区| 日韩精品影音先锋| 在线一区二区观看| 成人性生交大片免费看在线播放| 日本人妖一区二区| 亚洲综合免费观看高清完整版在线| 久久婷婷国产综合精品青草 | 亚洲欧美在线观看| 26uuu亚洲综合色| 欧美日韩国产123区| 99视频一区二区| 国内成人免费视频| 日韩成人免费电影| 亚洲国产精品一区二区www | 亚洲成av人片一区二区| 欧美国产综合色视频| 欧美大肚乱孕交hd孕妇| 欧美日韩久久久| 色狠狠桃花综合| 成人免费观看男女羞羞视频| 久久精品国产精品青草| 天堂va蜜桃一区二区三区 | 国产成人在线视频免费播放| 蜜桃传媒麻豆第一区在线观看| 亚洲福利视频导航| 一区二区三区免费在线观看| 亚洲丝袜精品丝袜在线| 国产精品久久久久久久蜜臀| 久久久久青草大香线综合精品| 日韩免费高清视频| 欧美一二区视频| 日韩一区二区不卡| 欧美一区二区视频免费观看| 欧美日韩午夜在线视频| 欧美日韩一本到| 欧美日韩aaa| 91精品国产综合久久久久久|