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

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

?? cexp.c

?? 這是完整的gcc源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    goto yyerrdefault;  yyn += YYTERROR;  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)    goto yyerrdefault;  yyn = yytable[yyn];  if (yyn < 0)    {      if (yyn == YYFLAG)	goto yyerrpop;      yyn = -yyn;      goto yyreduce;    }  else if (yyn == 0)    goto yyerrpop;  if (yyn == YYFINAL)    YYACCEPT;#if YYDEBUG != 0  if (yydebug)    fprintf(stderr, "Shifting error token, ");#endif  *++yyvsp = yylval;#ifdef YYLSP_NEEDED  *++yylsp = yylloc;#endif  yystate = yyn;  goto yynewstate;}#line 203 "./cexp.y"/* During parsing of a C expression, the pointer to the next character   is in this variable.  */static char *lexptr;/* Take care of parsing a number (anything that starts with a digit).   Set yylval and return the token type; update lexptr.   LEN is the number of characters in it.  *//* maybe needs to actually deal with floating point numbers */intparse_number (olen)     int olen;{  register char *p = lexptr;  register long n = 0;  register int c;  register int base = 10;  register int len = olen;  for (c = 0; c < len; c++)    if (p[c] == '.') {      /* It's a float since it contains a point.  */      yyerror ("floating point numbers not allowed in #if expressions");      return ERROR;    }  yylval.integer.unsignedp = 0;  if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) {    p += 2;    base = 16;    len -= 2;  }  else if (*p == '0')    base = 8;  while (len > 0) {    c = *p++;    len--;    if (c >= 'A' && c <= 'Z') c += 'a' - 'A';    if (c >= '0' && c <= '9') {      n *= base;      n += c - '0';    } else if (base == 16 && c >= 'a' && c <= 'f') {      n *= base;      n += c - 'a' + 10;    } else {      /* `l' means long, and `u' means unsigned.  */      while (1) {	if (c == 'l' || c == 'L')	  ;	else if (c == 'u' || c == 'U')	  yylval.integer.unsignedp = 1;	else	  break;	if (len == 0)	  break;	c = *p++;	len--;      }      /* Don't look for any more digits after the suffixes.  */      break;    }  }  if (len != 0) {    yyerror ("Invalid number in #if expression");    return ERROR;  }  /* If too big to be signed, consider it unsigned.  */  if (n < 0)    yylval.integer.unsignedp = 1;  lexptr = p;  yylval.integer.value = n;  return INT;}struct token {  char *operator;  int token;};#ifndef NULL#define NULL 0#endifstatic struct token tokentab2[] = {  {"&&", AND},  {"||", OR},  {"<<", LSH},  {">>", RSH},  {"==", EQUAL},  {"!=", NOTEQUAL},  {"<=", LEQ},  {">=", GEQ},  {NULL, ERROR}};/* Read one token, getting characters through lexptr.  */intyylex (){  register int c;  register int namelen;  register char *tokstart;  register struct token *toktab; retry:  tokstart = lexptr;  c = *tokstart;  /* See if it is a special token of length 2.  */  for (toktab = tokentab2; toktab->operator != NULL; toktab++)    if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) {      lexptr += 2;      return toktab->token;    }  switch (c) {  case 0:    return 0;      case ' ':  case '\t':  case '\r':  case '\n':    lexptr++;    goto retry;      case '\'':    lexptr++;    c = *lexptr++;    if (c == '\\')      c = parse_escape (&lexptr);    /* Sign-extend the constant if chars are signed on target machine.  */    {      if (lookup ("__CHAR_UNSIGNED__", sizeof ("__CHAR_UNSIGNED__")-1, -1)	  || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0)	yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1);      else	yylval.integer.value = c | ~((1 << CHAR_TYPE_SIZE) - 1);    }    yylval.integer.unsignedp = 0;    c = *lexptr++;    if (c != '\'') {      yyerror ("Invalid character constant in #if");      return ERROR;    }        return CHAR;    /* some of these chars are invalid in constant expressions;       maybe do something about them later */  case '/':  case '+':  case '-':  case '*':  case '%':  case '|':  case '&':  case '^':  case '~':  case '!':  case '@':  case '<':  case '>':  case '(':  case ')':  case '[':  case ']':  case '.':  case '?':  case ':':  case '=':  case '{':  case '}':  case ',':    lexptr++;    return c;      case '"':    yyerror ("double quoted strings not allowed in #if expressions");    return ERROR;  }  if (c >= '0' && c <= '9') {    /* It's a number */    for (namelen = 0;	 c = tokstart[namelen], is_idchar[c] || c == '.'; 	 namelen++)      ;    return parse_number (namelen);  }    if (!is_idstart[c]) {    yyerror ("Invalid token in expression");    return ERROR;  }    /* It is a name.  See how long it is.  */    for (namelen = 0; is_idchar[tokstart[namelen]]; namelen++)    ;    lexptr += namelen;  return NAME;}/* Parse a C escape sequence.  STRING_PTR points to a variable   containing a pointer to the string to parse.  That pointer   is updated past the characters we use.  The value of the   escape sequence is returned.   A negative value means the sequence \ newline was seen,   which is supposed to be equivalent to nothing at all.   If \ is followed by a null character, we return a negative   value and leave the string pointer pointing at the null character.   If \ is followed by 000, we return 0 and leave the string pointer   after the zeros.  A value of 0 does not mean end of string.  */intparse_escape (string_ptr)     char **string_ptr;{  register int c = *(*string_ptr)++;  switch (c)    {    case 'a':      return TARGET_BELL;    case 'b':      return TARGET_BS;    case 'e':      return 033;    case 'f':      return TARGET_FF;    case 'n':      return TARGET_NEWLINE;    case 'r':      return TARGET_CR;    case 't':      return TARGET_TAB;    case 'v':      return TARGET_VT;    case '\n':      return -2;    case 0:      (*string_ptr)--;      return 0;    case '^':      c = *(*string_ptr)++;      if (c == '\\')	c = parse_escape (string_ptr);      if (c == '?')	return 0177;      return (c & 0200) | (c & 037);          case '0':    case '1':    case '2':    case '3':    case '4':    case '5':    case '6':    case '7':      {	register int i = c - '0';	register int count = 0;	while (++count < 3)	  {	    c = *(*string_ptr)++;	    if (c >= '0' && c <= '7')	      i = (i << 3) + c - '0';	    else	      {		(*string_ptr)--;		break;	      }	  }	if ((i & ~((1 << CHAR_TYPE_SIZE) - 1)) != 0)	  {	    i &= (1 << CHAR_TYPE_SIZE) - 1;	    warning ("octal character constant does not fit in a byte");	  }	return i;      }    case 'x':      {	register int i = 0;	register int count = 0;	for (;;)	  {	    c = *(*string_ptr)++;	    if (c >= '0' && c <= '9')	      i = (i << 4) + c - '0';	    else if (c >= 'a' && c <= 'f')	      i = (i << 4) + c - 'a' + 10;	    else if (c >= 'A' && c <= 'F')	      i = (i << 4) + c - 'A' + 10;	    else	      {		(*string_ptr)--;		break;	      }	  }	if ((i & ~((1 << BITS_PER_UNIT) - 1)) != 0)	  {	    i &= (1 << BITS_PER_UNIT) - 1;	    warning ("hex character constant does not fit in a byte");	  }	return i;      }    default:      return c;    }}voidyyerror (s)     char *s;{  error (s);  longjmp (parse_return_error, 1);}/* This page contains the entry point to this file.  *//* Parse STRING as an expression, and complain if this fails   to use up all of the contents of STRING.  *//* We do not support C comments.  They should be removed before   this function is called.  */intparse_c_expression (string)     char *string;{  lexptr = string;    if (lexptr == 0 || *lexptr == 0) {    error ("empty #if expression");    return 0;			/* don't include the #if group */  }  /* if there is some sort of scanning error, just return 0 and assume     the parsing routine has printed an error message somewhere.     there is surely a better thing to do than this.     */  if (setjmp (parse_return_error))    return 0;  if (yyparse ())    return 0;			/* actually this is never reached				   the way things stand. */  if (*lexptr)    error ("Junk after end of expression.");  return expression_value;	/* set by yyparse () */}#ifdef TEST_EXP_READER/* main program, for testing purposes. */main (){  int n, c;  char buf[1024];  extern int yydebug;/*  yydebug = 1;*/  initialize_random_junk ();  for (;;) {    printf ("enter expression: ");    n = 0;    while ((buf[n] = getchar ()) != '\n' && buf[n] != EOF)      n++;    if (buf[n] == EOF)      break;    buf[n] = '\0';    printf ("parser returned %d\n", parse_c_expression (buf));  }}/* table to tell if char can be part of a C identifier. */unsigned char is_idchar[256];/* table to tell if char can be first char of a c identifier. */unsigned char is_idstart[256];/* table to tell if c is horizontal space.  isspace () thinks that   newline is space; this is not a good idea for this program. */char is_hor_space[256];/* * initialize random junk in the hash table and maybe other places */initialize_random_junk (){  register int i;  /*   * Set up is_idchar and is_idstart tables.  These should be   * faster than saying (is_alpha (c) || c == '_'), etc.   * Must do set up these things before calling any routines tthat   * refer to them.   */  for (i = 'a'; i <= 'z'; i++) {    ++is_idchar[i - 'a' + 'A'];    ++is_idchar[i];    ++is_idstart[i - 'a' + 'A'];    ++is_idstart[i];  }  for (i = '0'; i <= '9'; i++)    ++is_idchar[i];  ++is_idchar['_'];  ++is_idstart['_'];#if DOLLARS_IN_IDENTIFIERS  ++is_idchar['$'];  ++is_idstart['$'];#endif  /* horizontal space table */  ++is_hor_space[' '];  ++is_hor_space['\t'];}error (msg){  printf ("error: %s\n", msg);}warning (msg){  printf ("warning: %s\n", msg);}struct hashnode *lookup (name, len, hash)     char *name;     int len;     int hash;{  return (DEFAULT_SIGNED_CHAR) ? 0 : ((struct hashnode *) -1);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂成人国产精品一区| 成人高清视频在线| 国产凹凸在线观看一区二区| 欧洲生活片亚洲生活在线观看| 在线不卡的av| 亚洲美女在线国产| 国产老妇另类xxxxx| 51午夜精品国产| 亚洲你懂的在线视频| 国产精品乡下勾搭老头1| 7777精品久久久大香线蕉| 亚洲国产精品ⅴa在线观看| 免费成人在线播放| 欧美日韩一区不卡| 免费一级片91| 日本高清不卡一区| 中文在线一区二区 | 日本欧美加勒比视频| 不卡在线观看av| wwwwww.欧美系列| 日本sm残虐另类| 欧美久久久久久久久中文字幕| 亚洲日本一区二区三区| 国产a区久久久| 久久久久久一级片| 国产福利一区二区三区视频| 欧美变态tickle挠乳网站| 亚洲成人午夜影院| 欧美男人的天堂一二区| 亚洲国产成人精品视频| 91成人在线观看喷潮| 亚洲伦理在线精品| 一本色道久久综合亚洲91| 国产精品国产三级国产aⅴ原创| 国产成人精品综合在线观看| 亚洲精品在线免费播放| 精品一区二区三区免费播放| 欧美大片在线观看| 精品中文字幕一区二区| 久久蜜桃av一区精品变态类天堂| 精品在线你懂的| 国产婷婷精品av在线| 成人午夜私人影院| 亚洲色图在线播放| 欧美视频三区在线播放| 日韩高清在线观看| 久久久久久一级片| 97久久精品人人澡人人爽| 玉足女爽爽91| 日韩一区二区三区三四区视频在线观看| 琪琪久久久久日韩精品| 日韩你懂的在线观看| 国产精品99久久久久久有的能看 | 欧美电视剧免费观看| 国产成人免费视频精品含羞草妖精| 国产精品情趣视频| 91精品福利视频| 日本麻豆一区二区三区视频| ww亚洲ww在线观看国产| 91免费在线视频观看| 亚洲大片免费看| 久久综合九色综合欧美亚洲| 97超碰欧美中文字幕| 天堂精品中文字幕在线| 国产欧美日韩不卡免费| 欧美在线观看一二区| 麻豆精品国产传媒mv男同| 国产精品二三区| 欧美老年两性高潮| 国产suv精品一区二区三区| 亚洲一二三区在线观看| 久久欧美中文字幕| 在线观看av一区二区| 九九精品一区二区| 亚洲电影你懂得| 中文字幕国产精品一区二区| 欧美高清视频一二三区 | 国产成人免费av在线| 亚洲综合区在线| 国产日韩精品一区| 91精品国产91久久久久久最新毛片| 波多野结衣亚洲一区| 美女视频网站黄色亚洲| 一区二区三区四区在线免费观看| 精品久久人人做人人爰| 欧美亚洲高清一区二区三区不卡| 国产精品123区| 免费成人美女在线观看.| 亚洲日本在线看| 国产精品美女久久久久久2018| 日韩一二三区视频| 欧美日韩一区精品| 日本黄色一区二区| 成人黄页毛片网站| 国产在线精品一区二区| 奇米777欧美一区二区| 亚洲国产精品久久人人爱蜜臀| 国产精品理论片| 国产视频亚洲色图| 久久亚洲精品国产精品紫薇| 日韩色在线观看| 欧美精品视频www在线观看| 色哟哟在线观看一区二区三区| 大胆欧美人体老妇| 国产a精品视频| 丁香婷婷综合色啪| 国产福利一区二区三区视频| 国产精品一区二区三区四区| 老司机午夜精品| 久久国产精品99久久人人澡| 六月婷婷色综合| 精品中文字幕一区二区小辣椒| 久久激情五月婷婷| 久草精品在线观看| 国产综合色产在线精品| 国产一区欧美日韩| 高清国产一区二区| www.亚洲在线| 欧美在线观看视频一区二区| 在线视频国内一区二区| 在线观看日产精品| 欧美疯狂做受xxxx富婆| 91精品国产综合久久久久久久| 欧美一区二区日韩一区二区| 日韩午夜电影在线观看| 久久久午夜精品理论片中文字幕| 久久久久久久久久久电影| 国产精品私人自拍| 亚洲精品国产精华液| 性久久久久久久久久久久| 男女视频一区二区| 国产伦精品一区二区三区视频青涩| 国产高清在线精品| 91网站最新地址| 欧美乱妇20p| 国产欧美精品国产国产专区| 中文字幕佐山爱一区二区免费| 亚洲最大成人综合| 久久精品国产亚洲aⅴ| 国产精品白丝jk黑袜喷水| 一本到不卡精品视频在线观看| 欧美二区乱c少妇| 久久久不卡网国产精品一区| 亚洲欧洲av在线| 首页综合国产亚洲丝袜| 国模娜娜一区二区三区| 91在线高清观看| 日韩午夜小视频| 亚洲日本丝袜连裤袜办公室| 日韩成人一级片| 国产 欧美在线| 91麻豆精品91久久久久久清纯 | 日韩免费观看高清完整版 | 久久午夜老司机| 亚洲精品中文字幕在线观看| 免费成人在线观看| 色婷婷av一区二区三区gif| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲午夜免费电影| 国产在线国偷精品免费看| 91国产精品成人| 久久久久高清精品| 亚洲韩国精品一区| 99免费精品视频| 精品久久久久久久久久久久包黑料 | 欧美三级乱人伦电影| 精品国产sm最大网站| 亚洲一区二区三区激情| 丁香五精品蜜臀久久久久99网站| 3atv在线一区二区三区| 亚洲色图一区二区三区| 处破女av一区二区| 日韩精品一区二区三区四区| 亚洲一区二区美女| 91香蕉视频mp4| 国产女同性恋一区二区| 美女视频网站黄色亚洲| 欧美三级日韩三级| 亚洲精品va在线观看| av在线免费不卡| 中文字幕乱码日本亚洲一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲精品在线一区二区| 午夜视频一区二区三区| 91免费版在线看| 国产精品成人免费在线| 东方欧美亚洲色图在线| 欧美国产日产图区| 国产精品夜夜爽| 国产午夜精品久久久久久免费视| 老司机精品视频导航| 91麻豆精品国产91久久久久久久久| 一区二区免费在线播放| 91看片淫黄大片一级在线观看| 中文字幕中文在线不卡住| 处破女av一区二区| 亚洲欧美一区二区三区孕妇| 成人丝袜18视频在线观看| 国产精品欧美久久久久一区二区| 国产成人自拍网|