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

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

?? chap29.lst

?? These files contain all of the code listings in C: The Complete Reference, 4th Edition The so
?? LST
?? 第 1 頁 / 共 4 頁
字號:

  token_type = 0; tok = 0;

  temp = token;
  *temp = '\0';

  /* skip over white space */
  while(iswhite(*prog) && *prog) ++prog;

  if(*prog == '\r') {
    ++prog;
    ++prog;
    /* skip over white space */
    while(iswhite(*prog) && *prog) ++prog;
  }

  if(*prog == '\0') { /* end of file */
    *token = '\0';
    tok = FINISHED;
    return (token_type = DELIMITER);
  }

  if(strchr("{}", *prog)) { /* block delimiters */
    *temp = *prog;
    temp++;
    *temp = '\0';
    prog++;
    return (token_type = BLOCK);
  }

  /* look for comments */
  if(*prog == '/')
    if(*(prog+1) == '*') { /* is a comment */
      prog += 2;
      do { /* find end of comment */
        while(*prog != '*') prog++;
        prog++;
      } while (*prog != '/');
      prog++;
    }

  if(strchr("!<>=", *prog)) { /* is or might be
                                 a relational operator */
    switch(*prog) {
      case '=': if(*(prog+1) == '=') {
          prog++; prog++;
          *temp = EQ;
          temp++; *temp = EQ; temp++;
          *temp = '\0';
       }
       break;
      case '!': if(*(prog+1) == '=') {
          prog++; prog++;
          *temp = NE;
          temp++; *temp = NE; temp++;
          *temp = '\0';
       }
       break;
      case '<': if(*(prog+1) == '=') {
          prog++; prog++;
          *temp = LE; temp++; *temp = LE;
       }
       else {
          prog++;
          *temp = LT;
       }
       temp++;
       *temp = '\0';
       break;
      case '>': if(*(prog+1) == '=') {
          prog++; prog++;
          *temp = GE; temp++; *temp = GE;
       }
       else {
         prog++;
         *temp = GT;
       }
       temp++;
       *temp = '\0';
       break;
    }
    if(*token) return(token_type = DELIMITER);
  }

  if(strchr("+-*^/%=;(),'", *prog)){ /* delimiter */
    *temp = *prog;
    prog++; /* advance to next position */
    temp++;
    *temp = '\0';
    return (token_type = DELIMITER);
  }

  if(*prog=='"') { /* quoted string */
    prog++;
    while(*prog != '"'&& *prog != '\r') *temp++ = *prog++;
    if(*prog == '\r') sntx_err(SYNTAX);
    prog++; *temp = '\0';
    return (token_type = STRING);
  }

  if(isdigit(*prog)) { /* number */
    while(!isdelim(*prog)) *temp++ = *prog++;
    *temp = '\0';
    return (token_type = NUMBER);
  }

  if(isalpha(*prog)) { /* var or command */
    while(!isdelim(*prog)) *temp++ = *prog++;
    token_type = TEMP;
  }

  *temp = '\0';

  /* see if a string is a command or a variable */
  if(token_type==TEMP) {
    tok = look_up(token); /* convert to internal rep */
    if(tok) token_type = KEYWORD; /* is a keyword */
    else token_type = IDENTIFIER;
  }
  return token_type;
}

/* Return a token to input stream. */
void putback(void)
{
  char *t;

  t = token;
  for(; *t; t++) prog--;
}

/* Look up a token's internal representation in the
   token table.
*/
int look_up(char *s)
{
  register int i;
  char *p;

  /* convert to lowercase */
  p = s;
  while(*p) { *p = tolower(*p); p++; }

  /* see if token is in table */
  for(i=0; *table[i].command; i++) {
    if(!strcmp(table[i].command, s)) return table[i].tok;
  }
  return 0; /* unknown command */
}

/* Return index of internal library function or -1 if
   not found.
*/
int internal_func(char *s)
{
  int i;

  for(i=0; intern_func[i].f_name[0]; i++) {
    if(!strcmp(intern_func[i].f_name, s))  return i;
  }
  return -1;
}

/* Return true if c is a delimiter. */
int isdelim(char c)
{
  if(strchr(" !;,+-<>'/*%^=()", c) || c == 9 ||
     c == '\r' || c == 0) return 1;
  return 0;
}

/* Return 1 if c is space or tab. */
int iswhite(char c)
{
  if(c == ' ' || c == '\t') return 1;
  else return 0;
}


listing 4
/* "Standard library" functions are declared here so
   they can be put into the internal function table that
   follows.
 */
int call_getche(void), call_putch(void);
int call_puts(void), print(void), getnum(void);

struct intern_func_type {
  char *f_name; /* function name */
  int (*p)();   /* pointer to the function */
} intern_func[] = {
  "getche", call_getche,
  "putch", call_putch,
  "puts", call_puts,
  "print", print,
  "getnum", getnum,
  "", 0  /* null terminate the list */
};

listing 5
/* Find the location of all functions in the program
   and store global variables. */
void prescan(void)
{
  char *p, *tp;
  char temp[32];
  int datatype; 
  int brace = 0;  /* When 0, this var tells us that
                     current source position is outside
                     of any function. */

  p = prog;
  func_index = 0;
  do {
    while(brace) {  /* bypass code inside functions */
      get_token();
      if(*token == '{') brace++;
      if(*token == '}') brace--;
    }

    tp = prog; /* save current position */
    get_token();
    /* global var type or function return type */
    if(tok==CHAR || tok==INT) { 
      datatype = tok; /* save data type */
      get_token();
      if(token_type == IDENTIFIER) {
        strcpy(temp, token);
        get_token();
        if(*token != '(') { /* must be global var */
          prog = tp; /* return to start of declaration */
          decl_global();
        }
        else if(*token == '(') {  /* must be a function */
          func_table[func_index].loc = prog;
          func_table[func_index].ret_type = datatype;
          strcpy(func_table[func_index].func_name, temp);
          func_index++;
          while(*prog != ')') prog++;
          prog++;
          /* now prog points to opening curly 
             brace of function */
        }
        else putback();
      }
    }
    else if(*token == '{') brace++;
  } while(tok != FINISHED);
  prog = p;
}

listing 6
/* An array of these structures will hold the info
   associated with global variables.
*/
struct var_type {
  char var_name[ID_LEN];
  int v_type;
  int value;
}  global_vars[NUM_GLOBAL_VARS];

int gvar_index; /* index into global variable table */

/* Declare a global variable. */
void decl_global(void)
{
  int vartype;

  get_token();  /* get type */

  vartype = tok; /* save var type */

  do { /* process comma-separated list */
    global_vars[gvar_index].v_type = vartype;
    global_vars[gvar_index].value = 0;  /* init to 0 */
    get_token();  /* get name */
    strcpy(global_vars[gvar_index].var_name, token);
    get_token();
    gvar_index++;
  } while(*token == ',');
  if(*token != ';') sntx_err(SEMI_EXPECTED);
}

listing 7
int main(int argc, char *argv[])
{
  if(argc != 2) {
    printf("Usage: littlec <filename>\n");
    exit(1);
  }

  /* allocate memory for the program */
  if((p_buf = (char *) malloc(PROG_SIZE))==NULL) {
    printf("Allocation Failure");
    exit(1);
  }

  /* load the program to execute */
  if(!load_program(p_buf, argv[1])) exit(1);
  if(setjmp(e_buf)) exit(1); /* initialize long jump buffer */

  gvar_index = 0;  /* initialize global variable index */

  /* set program pointer to start of program buffer */
  prog = p_buf;
  prescan(); /* find the location of all functions
                and global variables in the program */

  lvartos = 0;     /* initialize local variable stack index */
  functos = 0;     /* initialize the CALL stack index */

  /* setup call to main() */
  prog = find_func("main"); /* find program starting point */

  if(!prog) { /* incorrect or missing main() function in program */
    printf("main() not found.\n");
    exit(1);
  }

  prog--; /* back up to opening ( */
  strcpy(token, "main");
  call(); /* call main() to start interpreting */

  return 0;
}

listing 8
/* Interpret a single statement or block of code. When
   interp_block() returns from its initial call, the final
   brace (or a return) in main() has been encountered.
*/
void interp_block(void)
{
  int value;
  char block = 0;

  do {
    token_type = get_token();

    /* If interpreting single statement, return on
       first semicolon.
    */

    /* see what kind of token is up */
    if(token_type == IDENTIFIER) {
      /* Not a keyword, so process expression. */
      putback();  /* restore token to input stream for
                     further processing by eval_exp() */
      eval_exp(&value);  /* process the expression */
      if(*token!=';') sntx_err(SEMI_EXPECTED);
    }
    else if(token_type==BLOCK) { /* if block delimiter */
      if(*token == '{') /* is a block */
        block = 1; /* interpreting block, not statement */
      else return; /* is a }, so return */
    }
    else /* is keyword */
      switch(tok) {
        case CHAR:
        case INT:     /* declare local variables */
          putback();
          decl_local();
          break;
        case RETURN:  /* return from function call */
          func_ret();
          return;
        case IF:      /* process an if statement */
          exec_if();
          break;
        case ELSE:    /* process an else statement */
          find_eob(); /* find end of else block
                         and continue execution */
          break;
        case WHILE:   /* process a while loop */
          exec_while();
          break;
        case DO:      /* process a do-while loop */
          exec_do();
          break;
        case FOR:     /* process a for loop */
          exec_for();
          break;
        case END:
          exit(0);
      }
  } while (tok != FINISHED && block);
}

listing 9
/* A Little C interpreter. */

#include <stdio.h>
#include <setjmp.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#define NUM_FUNC        100
#define NUM_GLOBAL_VARS 100
#define NUM_LOCAL_VARS  200
#define NUM_BLOCK       100
#define ID_LEN          31
#define FUNC_CALLS      31
#define NUM_PARAMS      31
#define PROG_SIZE       10000
#define LOOP_NEST       31

enum tok_types {DELIMITER, IDENTIFIER, NUMBER, KEYWORD,
                TEMP, STRING, BLOCK};

/* add additional C keyword tokens here */
enum tokens {ARG, CHAR, INT, IF, ELSE, FOR, DO, WHILE,
             SWITCH, RETURN, EOL, FINISHED, END};

/* add additional double operators here (such as ->) */
enum double_ops {LT=1, LE, GT, GE, EQ, NE};

/* These are the constants used to call sntx_err() when
   a syntax error occurs. Add more if you like.
   NOTE: SYNTAX is a generic error message used when
   nothing else seems appropriate.
*/
enum error_msg
     {SYNTAX, UNBAL_PARENS, NO_EXP, EQUALS_EXPECTED,
      NOT_VAR, PARAM_ERR, SEMI_EXPECTED,
      UNBAL_BRACES, FUNC_UNDEF, TYPE_EXPECTED,
      NEST_FUNC, RET_NOCALL, PAREN_EXPECTED,
      WHILE_EXPECTED, QUOTE_EXPECTED, NOT_TEMP,
      TOO_MANY_LVARS, DIV_BY_ZERO};

char *prog;    /* current location in source code */
char *p_buf;   /* points to start of program buffer */
jmp_buf e_buf; /* hold environment for longjmp() */

/* An array of these structures will hold the info
   associated with global variables.
*/
struct var_type {
  char var_name[ID_LEN];
  int v_type;
  int value;
}  global_vars[NUM_GLOBAL_VARS];

struct var_type local_var_stack[NUM_LOCAL_VARS];

struct func_type {
  char func_name[ID_LEN];
  int ret_type; 
  char *loc;  /* location of entry point in file */
} func_table[NUM_FUNC];

int call_stack[NUM_FUNC];

struct commands { /* keyword lookup table */
  char command[20];
  char tok;
} table[] = { /* Commands must be entered lowercase */
  "if", IF, /* in this table. */
  "else", ELSE,
  "for", FOR,
  "do", DO,
  "while", WHILE,
  "char", CHAR,
  "int", INT,
  "return", RETURN,
  "end", END,
  "", END  /* mark end of table */
};

char token[80];
char token_type, tok;

int functos;  /* index to top of function call stack */
int func_index; /* index into function table */
int gvar_index; /* index into global variable table */
int lvartos; /* index into local variable stack */

int ret_value; /* function return value */

void print(void), prescan(void);
void decl_global(void), call(void), putback(void);
void decl_local(void), local_push(struct var_type i);
void eval_exp(int *value), sntx_err(int error);
void exec_if(void), find_eob(void), exec_for(void);
void get_params(void), get_args(void);
void exec_while(void), func_push(int i), exec_do(void);
void assign_var(char *var_name, int value);
int load_program(char *p, char *fname), find_var(char *s);
void interp_block(void), func_ret(void);
int func_pop(void), is_var(char *s), get_token(void);
char *find_func(char *name);

int main(int argc, char *argv[])
{
  if(argc != 2) {
    printf("Usage: littlec <filename>\n");
    exit(1);
  }

  /* allocate memory for the program */
  if((p_buf = (char *) malloc(PROG_SIZE))==NULL) {
    printf("Allocation Failure");
    exit(1);
  }

  /* load the program to execute */
  if(!load_program(p_buf, argv[1])) exit(1);
  if(setjmp(e_buf)) exit(1); /* initialize long jump buffer */

  gvar_index = 0;  /* initialize global variable index */

  /* set program pointer to start of program buffer */
  prog = p_buf;
  prescan(); /* find the location of all functions
                and global variables in the program */

  lvartos = 0;     /* initialize local variable stack index */
  functos = 0;     /* initialize the CALL stack index */

  /* setup call to main() */
  prog = find_func("main"); /* find program starting point */

  if(!prog) { /* incorrect or missing main() function in program */
    printf("main() not found.\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国十次综合导航| 久久精品国产亚洲aⅴ| 久久综合狠狠综合久久激情| 欧美电影在线免费观看| 欧美日韩一区在线| 欧美狂野另类xxxxoooo| 欧美在线观看一二区| 欧美在线观看视频在线| 欧美日韩和欧美的一区二区| 欧美麻豆精品久久久久久| 91精品一区二区三区久久久久久| 欧美人体做爰大胆视频| 日韩一区二区三区在线视频| 欧美www视频| 日本一区二区成人| 曰韩精品一区二区| 日韩国产高清影视| 韩国欧美一区二区| 粉嫩嫩av羞羞动漫久久久| 99国产精品久久久久| 欧美性猛片xxxx免费看久爱 | 日韩你懂的电影在线观看| 制服.丝袜.亚洲.中文.综合| 精品国产麻豆免费人成网站| 国产欧美视频在线观看| 一区二区三区日韩欧美| 久久精品国产一区二区| 99免费精品在线观看| 欧美三级电影精品| 国产亚洲午夜高清国产拍精品| 综合久久综合久久| 免费成人结看片| voyeur盗摄精品| 欧美人xxxx| 国产精品久久久久久久久搜平片| 有坂深雪av一区二区精品| 免费高清在线视频一区·| jvid福利写真一区二区三区| 欧美精品久久99久久在免费线 | 亚洲制服丝袜av| 久久av中文字幕片| 91原创在线视频| 精品久久久三级丝袜| 亚洲欧洲日韩女同| 激情五月婷婷综合| 欧美日韩中文字幕一区| 国产午夜三级一区二区三| 午夜免费欧美电影| 波多野洁衣一区| 日韩精品一区二区三区在线| 亚洲综合一区二区| 成人一级片网址| 欧美变态凌虐bdsm| 亚洲国产成人av好男人在线观看| 成人av免费在线播放| 欧美电视剧免费观看| 亚洲成人av一区二区三区| 国产精品一级黄| 欧美成人精精品一区二区频| 日韩中文字幕亚洲一区二区va在线 | 欧美在线观看视频在线| 国产精品久久久久久久裸模| 国产很黄免费观看久久| 欧美不卡123| 美女视频黄 久久| 91麻豆精品国产91| 亚洲国产精品精华液网站| 91最新地址在线播放| 国产精品美女久久久久久| 国产精品12区| 欧美国产欧美亚州国产日韩mv天天看完整 | 一区二区三区日韩精品视频| 91一区二区三区在线播放| 欧美激情一区在线| 国产精品一区三区| 久久精品在线观看| 国产精品99久久久久久有的能看 | 亚洲国产精品成人综合色在线婷婷| 另类的小说在线视频另类成人小视频在线 | 国产九九视频一区二区三区| 欧美成人欧美edvon| 久久国产乱子精品免费女| 日韩精品一区二区三区视频在线观看| 日韩在线观看一区二区| 欧美一二三区在线观看| 老汉av免费一区二区三区 | 国产传媒一区在线| 国产精品久久午夜| 色综合天天综合网国产成人综合天| 中文字幕一区二区三区蜜月 | 久久精品视频网| 丁香啪啪综合成人亚洲小说| 亚洲欧洲日产国码二区| 色94色欧美sute亚洲线路一ni| 亚洲成av人**亚洲成av**| 91精品国产美女浴室洗澡无遮挡| 蜜臀av国产精品久久久久| 日本一区二区三区免费乱视频| 国产91精品在线观看| 一区二区三区在线观看视频| 91精品国产乱| 国产99精品在线观看| 亚洲免费视频中文字幕| 777亚洲妇女| 成人一区二区三区| 天使萌一区二区三区免费观看| 日韩欧美在线1卡| 成人精品一区二区三区中文字幕 | 精品国产一区二区在线观看| 国产成人一区二区精品非洲| 一区二区三区在线免费观看| 精品少妇一区二区三区在线视频| 成人小视频在线| 亚洲成人激情av| 国产人久久人人人人爽| 91国模大尺度私拍在线视频| 精品一区二区三区av| 亚洲精品老司机| 国产欧美一区二区在线| 欧美电影一区二区| 色综合网色综合| 韩国av一区二区三区四区| 亚洲一区在线观看网站| 国产亚洲短视频| 欧美一级搡bbbb搡bbbb| 色婷婷亚洲一区二区三区| 伦理电影国产精品| 亚洲一区二区3| 国产精品白丝在线| 日韩久久久精品| 欧美二区乱c少妇| 欧美主播一区二区三区| 99久久久免费精品国产一区二区| 国产99一区视频免费| 麻豆精品久久精品色综合| 一区二区三区四区激情| 中文一区在线播放| 日韩久久久久久| 69堂国产成人免费视频| 欧洲视频一区二区| 99久久99久久精品国产片果冻| 国内欧美视频一区二区| 强制捆绑调教一区二区| 视频一区视频二区在线观看| 一区二区三区中文字幕电影| 亚洲欧美一区二区三区极速播放| 中文字幕+乱码+中文字幕一区| 久久影院视频免费| 精品久久一二三区| 久久综合资源网| 久久综合九色综合97_久久久| 欧美成人精精品一区二区频| 欧美xxxxxxxxx| 久久精品男人天堂av| 国产三级精品三级在线专区| 久久久久久影视| 国产亚洲成aⅴ人片在线观看| 国产亚洲va综合人人澡精品 | 性欧美疯狂xxxxbbbb| 亚洲国产一区二区视频| 一区二区三区在线播| 五月婷婷激情综合网| 婷婷久久综合九色综合伊人色| 午夜精品久久久| 另类小说一区二区三区| 国产一级精品在线| av亚洲产国偷v产偷v自拍| 99这里只有久久精品视频| 91啪九色porn原创视频在线观看| 色美美综合视频| 6080午夜不卡| 久久精品亚洲乱码伦伦中文| 国产精品久久综合| 一区二区三区.www| 人人超碰91尤物精品国产| 国产精品一色哟哟哟| av电影天堂一区二区在线| 欧美性一级生活| 日韩精品一区二区三区在线| 中文成人av在线| 亚洲18色成人| 黄一区二区三区| 91丨porny丨中文| 欧美一区二区视频观看视频| 国产欧美日韩综合| 亚洲第四色夜色| 国产高清亚洲一区| 欧美日韩一区久久| 欧美激情一区二区三区在线| 香蕉成人啪国产精品视频综合网| 久久国产精品72免费观看| 99久久国产综合精品女不卡| 91精品国产全国免费观看| 中文字幕av一区二区三区免费看 | 日本精品视频一区二区| 日韩免费观看高清完整版| 亚洲手机成人高清视频| 激情综合亚洲精品| 欧美午夜不卡在线观看免费| 亚洲一区二区欧美日韩|