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

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

?? c-lex.c

?? gcc庫的原代碼,對編程有很大幫助.
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* Lexical analyzer for C and Objective C.   Copyright (C) 1987, 88, 89, 92, 94, 1995 Free Software Foundation, Inc.This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU CC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING.  If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA.  */#include <stdio.h>#include <errno.h>#include <setjmp.h>#include "config.h"#include "rtl.h"#include "tree.h"#include "input.h"#include "c-lex.h"#include "c-tree.h"#include "flags.h"#include "c-parse.h"#include "c-pragma.h"#include <ctype.h>#ifdef MULTIBYTE_CHARS#include <stdlib.h>#include <locale.h>#endif#ifndef errnoextern int errno;#endif/* The elements of `ridpointers' are identifier nodes   for the reserved type names and storage classes.   It is indexed by a RID_... value.  */tree ridpointers[(int) RID_MAX];/* Cause the `yydebug' variable to be defined.  */#define YYDEBUG 1/* the declaration found for the last IDENTIFIER token read in.   yylex must look this up to detect typedefs, which get token type TYPENAME,   so it is left around in case the identifier is not a typedef but is   used in a context which makes it a reference to a variable.  */tree lastiddecl;/* Nonzero enables objc features.  */int doing_objc_thang;extern tree is_class_name ();extern int yydebug;/* File used for outputting assembler code.  */extern FILE *asm_out_file;#ifndef WCHAR_TYPE_SIZE#ifdef INT_TYPE_SIZE#define WCHAR_TYPE_SIZE INT_TYPE_SIZE#else#define WCHAR_TYPE_SIZE	BITS_PER_WORD#endif#endif/* Number of bytes in a wide character.  */#define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)static int maxtoken;		/* Current nominal length of token buffer.  */char *token_buffer;	/* Pointer to token buffer.			   Actual allocated length is maxtoken + 2.			   This is not static because objc-parse.y uses it.  *//* Nonzero if end-of-file has been seen on input.  */static int end_of_file;/* Buffered-back input character; faster than using ungetc.  */static int nextchar = -1;int check_newline ();/* Do not insert generated code into the source, instead, include it.   This allows us to build gcc automatically even for targets that   need to add or modify the reserved keyword lists.  */#include "c-gperf.h"/* Return something to represent absolute declarators containing a *.   TARGET is the absolute declarator that the * contains.   TYPE_QUALS is a list of modifiers such as const or volatile   to apply to the pointer type, represented as identifiers.   We return an INDIRECT_REF whose "contents" are TARGET   and whose type is the modifier list.  */treemake_pointer_declarator (type_quals, target)     tree type_quals, target;{  return build1 (INDIRECT_REF, type_quals, target);}voidforget_protocol_qualifiers (){  int i, n = sizeof wordlist / sizeof (struct resword);  for (i = 0; i < n; i++)    if ((int) wordlist[i].rid >= (int) RID_IN        && (int) wordlist[i].rid <= (int) RID_ONEWAY)      wordlist[i].name = "";}voidremember_protocol_qualifiers (){  int i, n = sizeof wordlist / sizeof (struct resword);  for (i = 0; i < n; i++)    if (wordlist[i].rid == RID_IN)      wordlist[i].name = "in";    else if (wordlist[i].rid == RID_OUT)      wordlist[i].name = "out";    else if (wordlist[i].rid == RID_INOUT)      wordlist[i].name = "inout";    else if (wordlist[i].rid == RID_BYCOPY)      wordlist[i].name = "bycopy";    else if (wordlist[i].rid == RID_ONEWAY)      wordlist[i].name = "oneway";   }voidinit_lex (){  /* Make identifier nodes long enough for the language-specific slots.  */  set_identifier_size (sizeof (struct lang_identifier));  /* Start it at 0, because check_newline is called at the very beginning     and will increment it to 1.  */  lineno = 0;#ifdef MULTIBYTE_CHARS  /* Change to the native locale for multibyte conversions.  */  setlocale (LC_CTYPE, "");#endif  maxtoken = 40;  token_buffer = (char *) xmalloc (maxtoken + 2);  ridpointers[(int) RID_INT] = get_identifier ("int");  ridpointers[(int) RID_CHAR] = get_identifier ("char");  ridpointers[(int) RID_VOID] = get_identifier ("void");  ridpointers[(int) RID_FLOAT] = get_identifier ("float");  ridpointers[(int) RID_DOUBLE] = get_identifier ("double");  ridpointers[(int) RID_SHORT] = get_identifier ("short");  ridpointers[(int) RID_LONG] = get_identifier ("long");  ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned");  ridpointers[(int) RID_SIGNED] = get_identifier ("signed");  ridpointers[(int) RID_INLINE] = get_identifier ("inline");  ridpointers[(int) RID_CONST] = get_identifier ("const");  ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");  ridpointers[(int) RID_AUTO] = get_identifier ("auto");  ridpointers[(int) RID_STATIC] = get_identifier ("static");  ridpointers[(int) RID_EXTERN] = get_identifier ("extern");  ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef");  ridpointers[(int) RID_REGISTER] = get_identifier ("register");  ridpointers[(int) RID_ITERATOR] = get_identifier ("iterator");  ridpointers[(int) RID_COMPLEX] = get_identifier ("complex");  ridpointers[(int) RID_ID] = get_identifier ("id");  ridpointers[(int) RID_IN] = get_identifier ("in");  ridpointers[(int) RID_OUT] = get_identifier ("out");  ridpointers[(int) RID_INOUT] = get_identifier ("inout");  ridpointers[(int) RID_BYCOPY] = get_identifier ("bycopy");  ridpointers[(int) RID_ONEWAY] = get_identifier ("oneway");  forget_protocol_qualifiers();  /* Some options inhibit certain reserved words.     Clear those words out of the hash table so they won't be recognized.  */#define UNSET_RESERVED_WORD(STRING) \  do { struct resword *s = is_reserved_word (STRING, sizeof (STRING) - 1); \       if (s) s->name = ""; } while (0)  if (! doing_objc_thang)    UNSET_RESERVED_WORD ("id");  if (flag_traditional)    {      UNSET_RESERVED_WORD ("const");      UNSET_RESERVED_WORD ("volatile");      UNSET_RESERVED_WORD ("typeof");      UNSET_RESERVED_WORD ("signed");      UNSET_RESERVED_WORD ("inline");      UNSET_RESERVED_WORD ("iterator");      UNSET_RESERVED_WORD ("complex");    }  if (flag_no_asm)    {      UNSET_RESERVED_WORD ("asm");      UNSET_RESERVED_WORD ("typeof");      UNSET_RESERVED_WORD ("inline");      UNSET_RESERVED_WORD ("iterator");      UNSET_RESERVED_WORD ("complex");    }}voidreinit_parse_for_function (){}/* Function used when yydebug is set, to print a token in more detail.  */voidyyprint (file, yychar, yylval)     FILE *file;     int yychar;     YYSTYPE yylval;{  tree t;  switch (yychar)    {    case IDENTIFIER:    case TYPENAME:    case OBJECTNAME:      t = yylval.ttype;      if (IDENTIFIER_POINTER (t))	fprintf (file, " `%s'", IDENTIFIER_POINTER (t));      break;    case CONSTANT:      t = yylval.ttype;      if (TREE_CODE (t) == INTEGER_CST)	fprintf (file,#if HOST_BITS_PER_WIDE_INT == 64#if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT		 " 0x%lx%016lx",#else		 " 0x%x%016x",#endif#else#if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT		 " 0x%lx%08lx",#else		 " 0x%x%08x",#endif#endif		 TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t));      break;    }}/* If C is not whitespace, return C.   Otherwise skip whitespace and return first nonwhite char read.  */static intskip_white_space (c)     register int c;{  static int newline_warning = 0;  for (;;)    {      switch (c)	{	  /* We don't recognize comments here, because	     cpp output can include / and * consecutively as operators.	     Also, there's no need, since cpp removes all comments.  */	case '\n':	  c = check_newline ();	  break;	case ' ':	case '\t':	case '\f':	case '\v':	case '\b':	  c = getc (finput);	  break;	case '\r':	  /* ANSI C says the effects of a carriage return in a source file	     are undefined.  */	  if (pedantic && !newline_warning)	    {	      warning ("carriage return in source file");	      warning ("(we only warn about the first carriage return)");	      newline_warning = 1;	    }	  c = getc (finput);	  break;	case '\\':	  c = getc (finput);	  if (c == '\n')	    lineno++;	  else	    error ("stray '\\' in program");	  c = getc (finput);	  break;	default:	  return (c);	}    }}/* Skips all of the white space at the current location in the input file.   Must use and reset nextchar if it has the next character.  */voidposition_after_white_space (){  register int c;  if (nextchar != -1)    c = nextchar, nextchar = -1;  else    c = getc (finput);  ungetc (skip_white_space (c), finput);}/* Make the token buffer longer, preserving the data in it.   P should point to just beyond the last valid character in the old buffer.   The value we return is a pointer to the new buffer   at a place corresponding to P.  */static char *extend_token_buffer (p)     char *p;{  int offset = p - token_buffer;  maxtoken = maxtoken * 2 + 10;  token_buffer = (char *) xrealloc (token_buffer, maxtoken + 2);  return token_buffer + offset;}/* At the beginning of a line, increment the line number   and process any #-directive on this line.   If the line is a #-directive, read the entire line and return a newline.   Otherwise, return the line's first non-whitespace character.  */intcheck_newline (){  register int c;  register int token;  lineno++;  /* Read first nonwhite char on the line.  */  c = getc (finput);  while (c == ' ' || c == '\t')    c = getc (finput);  if (c != '#')    {      /* If not #, return it so caller will use it.  */      return c;    }  /* Read first nonwhite char after the `#'.  */  c = getc (finput);  while (c == ' ' || c == '\t')    c = getc (finput);  /* If a letter follows, then if the word here is `line', skip     it and ignore it; otherwise, ignore the line, with an error     if the word isn't `pragma', `ident', `define', or `undef'.  */  if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))    {      if (c == 'p')	{	  if (getc (finput) == 'r'	      && getc (finput) == 'a'	      && getc (finput) == 'g'	      && getc (finput) == 'm'	      && getc (finput) == 'a'	      && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))	    {#ifdef HANDLE_SYSV_PRAGMA	      return handle_sysv_pragma (finput, c);#else /* !HANDLE_SYSV_PRAGMA */#ifdef HANDLE_PRAGMA	      HANDLE_PRAGMA (finput);#endif /* HANDLE_PRAGMA */	      goto skipline;#endif /* !HANDLE_SYSV_PRAGMA */	    }	}      else if (c == 'd')	{	  if (getc (finput) == 'e'	      && getc (finput) == 'f'	      && getc (finput) == 'i'	      && getc (finput) == 'n'	      && getc (finput) == 'e'	      && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))	    {#ifdef DWARF_DEBUGGING_INFO	      if ((debug_info_level == DINFO_LEVEL_VERBOSE)		  && (write_symbols == DWARF_DEBUG))	        dwarfout_define (lineno, get_directive_line (finput));#endif /* DWARF_DEBUGGING_INFO */	      goto skipline;	    }	}      else if (c == 'u')	{	  if (getc (finput) == 'n'	      && getc (finput) == 'd'	      && getc (finput) == 'e'	      && getc (finput) == 'f'	      && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))	    {#ifdef DWARF_DEBUGGING_INFO	      if ((debug_info_level == DINFO_LEVEL_VERBOSE)		  && (write_symbols == DWARF_DEBUG))	        dwarfout_undef (lineno, get_directive_line (finput));#endif /* DWARF_DEBUGGING_INFO */	      goto skipline;	    }	}      else if (c == 'l')	{	  if (getc (finput) == 'i'	      && getc (finput) == 'n'	      && getc (finput) == 'e'	      && ((c = getc (finput)) == ' ' || c == '\t'))	    goto linenum;	}      else if (c == 'i')	{	  if (getc (finput) == 'd'	      && getc (finput) == 'e'	      && getc (finput) == 'n'	      && getc (finput) == 't'	      && ((c = getc (finput)) == ' ' || c == '\t'))	    {	      /* #ident.  The pedantic warning is now in cccp.c.  */	      /* Here we have just seen `#ident '.		 A string constant should follow.  */	      while (c == ' ' || c == '\t')		c = getc (finput);	      /* If no argument, ignore the line.  */	      if (c == '\n')		return c;	      ungetc (c, finput);	      token = yylex ();	      if (token != STRING		  || TREE_CODE (yylval.ttype) != STRING_CST)		{		  error ("invalid #ident");		  goto skipline;		}	      if (!flag_no_ident)		{#ifdef ASM_OUTPUT_IDENT		  ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (yylval.ttype));#endif		}	      /* Skip the rest of this line.  */	      goto skipline;	    }	}      error ("undefined or invalid # directive");      goto skipline;    }linenum:  /* Here we have either `#line' or `# <nonletter>'.     In either case, it should be a line number; a digit should follow.  */  while (c == ' ' || c == '\t')    c = getc (finput);  /* If the # is the only nonwhite char on the line,     just ignore it.  Check the new newline.  */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频第一区免费观看| 色综合天天在线| 国产精品欧美久久久久无广告 | 日韩一区二区免费电影| 免费高清不卡av| 久久久噜噜噜久久中文字幕色伊伊 | 99久久伊人精品| 亚洲女人****多毛耸耸8| 91国产免费看| 日本成人中文字幕| 久久久久久综合| 99久久99久久久精品齐齐| 亚洲制服欧美中文字幕中文字幕| 欧美人成免费网站| 国内精品视频666| 自拍偷自拍亚洲精品播放| 亚洲欧美日韩国产综合在线| 欧美专区亚洲专区| 久久激情五月婷婷| 国产精品午夜春色av| 91激情在线视频| 美女在线观看视频一区二区| 国产欧美一区二区在线| 色综合久久天天| 免费在线看一区| 国产日韩欧美在线一区| 色婷婷综合久久久中文一区二区| 日本不卡一区二区| 日本一区二区免费在线| 欧美亚洲一区三区| 激情综合色丁香一区二区| 一区在线观看免费| 91精品国产综合久久蜜臀 | 91亚洲男人天堂| 日本在线观看不卡视频| 中文子幕无线码一区tr| 欧美日韩一区二区三区四区| 国产一区二区三区久久久| 伊人夜夜躁av伊人久久| 欧美大片免费久久精品三p| av综合在线播放| 七七婷婷婷婷精品国产| 最近中文字幕一区二区三区| 69久久99精品久久久久婷婷| 丰满白嫩尤物一区二区| 午夜激情久久久| 国产精品美女久久久久av爽李琼| 欧美日韩国产精品成人| 国产福利一区二区| 日韩精品亚洲一区| 国产精品电影一区二区| 日韩三级视频在线观看| 91麻豆国产自产在线观看| 麻豆一区二区三| 洋洋av久久久久久久一区| 久久久国产精品午夜一区ai换脸| 欧美日韩精品免费观看视频| 国产91精品入口| 免播放器亚洲一区| 亚洲精品一二三四区| 国产亚洲欧美色| 欧美日韩激情一区二区| 93久久精品日日躁夜夜躁欧美| 蜜臀久久99精品久久久久久9| 亚洲免费毛片网站| 久久久精品综合| 欧美一区二区三区色| 亚洲另类在线一区| 国产亚洲精品超碰| 日韩亚洲欧美在线| 欧美午夜精品久久久| 成人综合激情网| 激情小说欧美图片| 日韩电影在线免费看| 一区二区三区四区视频精品免费| 久久精品这里都是精品| 日韩女优av电影| 欧美男生操女生| 在线观看av一区二区| 成人一级片在线观看| 精品一区二区三区不卡| 天天操天天综合网| 夜夜亚洲天天久久| 亚洲人成影院在线观看| 日本一区二区久久| 久久久亚洲午夜电影| 欧美岛国在线观看| 777亚洲妇女| 欧美精品一卡二卡| 在线观看视频欧美| 91丝袜呻吟高潮美腿白嫩在线观看| 国产永久精品大片wwwapp| 久久精品国产色蜜蜜麻豆| 日本系列欧美系列| 爽好久久久欧美精品| 亚洲444eee在线观看| 亚洲一区二区三区四区在线 | 一本色道久久综合亚洲91| 丁香激情综合五月| 国产成人精品1024| 国产精品一二一区| 国产精品系列在线播放| 国产在线国偷精品免费看| 麻豆国产一区二区| 麻豆成人91精品二区三区| 麻豆91在线播放免费| 秋霞成人午夜伦在线观看| 免费在线观看一区二区三区| 偷拍亚洲欧洲综合| 丝袜美腿成人在线| 日韩激情在线观看| 麻豆91在线看| 国产乱理伦片在线观看夜一区| 国产精品资源网站| 国产成人啪免费观看软件| 成人动漫中文字幕| 96av麻豆蜜桃一区二区| 色就色 综合激情| 欧美日韩在线免费视频| 欧美精品国产精品| 欧美成人女星排名| 国产亚洲va综合人人澡精品| 国产日韩影视精品| 中文字幕视频一区二区三区久| 亚洲乱码中文字幕| 亚洲777理论| 极品瑜伽女神91| 国产高清成人在线| 99久久婷婷国产精品综合| 在线观看国产日韩| 欧美夫妻性生活| 日韩精品一区二区三区四区| 色综合久久久久久久久| 欧美视频日韩视频| 4438亚洲最大| 久久99九九99精品| 国产98色在线|日韩| 成人免费观看男女羞羞视频| 不卡视频一二三四| 成人h精品动漫一区二区三区| 91美女视频网站| 欧美最猛性xxxxx直播| 精品视频免费在线| 91精品国产综合久久精品性色| 精品国产三级a在线观看| 久久欧美中文字幕| 中文字幕成人av| 亚洲精品中文在线观看| 一区二区三区欧美日| 乱一区二区av| 春色校园综合激情亚洲| 色综合视频一区二区三区高清| 欧美在线你懂的| 久久综合色播五月| 国产精品卡一卡二卡三| 亚洲中国最大av网站| 日本不卡一区二区三区| 久久成人综合网| 色综合一个色综合| 欧美精品777| 2020国产精品久久精品美国| 国产三级精品三级| 亚洲va欧美va人人爽| 奇米精品一区二区三区在线观看一| 久久国产日韩欧美精品| 成人精品国产一区二区4080| 欧美影院一区二区| 精品国产一区久久| 亚洲特级片在线| 午夜婷婷国产麻豆精品| 首页亚洲欧美制服丝腿| 国产成人精品亚洲午夜麻豆| 91原创在线视频| 欧美一区二区三区视频免费播放| 精品国产一区二区三区不卡| 亚洲免费观看高清完整| 青青草原综合久久大伊人精品| 国产成人av资源| 欧美午夜片在线看| 国产精品欧美综合在线| 性感美女久久精品| 国产不卡在线一区| 欧美日韩一区 二区 三区 久久精品| 国产欧美日韩精品一区| 香蕉成人伊视频在线观看| 国产精品一二三| 欧美日韩精品一区二区三区四区 | 久久综合九色综合97_久久久| 亚洲人成精品久久久久久| 日韩激情一二三区| 成人性色生活片免费看爆迷你毛片| 日本福利一区二区| 国产亚洲欧美色| 亚洲综合图片区| 粉嫩av一区二区三区粉嫩| 欧美日韩亚洲综合| 国产亚洲欧美日韩俺去了| 欧美日韩免费观看一区三区| 国产亚洲视频系列| 天天色综合成人网|