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

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

?? lemon.c

?? 新版輕量級嵌入式數據庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
int min;int max;{  int i,spot;  char c;  for(i=spot=min; i<=max; i++){    c = msg[i];    if( c=='\t' ) msg[i] = ' ';    if( c=='\n' ){ msg[i] = ' '; spot = i; break; }    if( c==0 ){ spot = i; break; }    if( c=='-' && i<max-1 ) spot = i+1;    if( c==' ' ) spot = i;  }  return spot;}/*** The error message is split across multiple lines if necessary.  The** splits occur at a space, if there is a space available near the end** of the line.*/#define ERRMSGSIZE  10000 /* Hope this is big enough.  No way to error check */#define LINEWIDTH      79 /* Max width of any output line */#define PREFIXLIMIT    30 /* Max width of the prefix on each line */void ErrorMsg(const char *filename, int lineno, const char *format, ...){  char errmsg[ERRMSGSIZE];  char prefix[PREFIXLIMIT+10];  int errmsgsize;  int prefixsize;  int availablewidth;  va_list ap;  int end, restart, base;  va_start(ap, format);  /* Prepare a prefix to be prepended to every output line */  if( lineno>0 ){    sprintf(prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno);  }else{    sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename);  }  prefixsize = strlen(prefix);  availablewidth = LINEWIDTH - prefixsize;  /* Generate the error message */  vsprintf(errmsg,format,ap);  va_end(ap);  errmsgsize = strlen(errmsg);  /* Remove trailing '\n's from the error message. */  while( errmsgsize>0 && errmsg[errmsgsize-1]=='\n' ){     errmsg[--errmsgsize] = 0;  }  /* Print the error message */  base = 0;  while( errmsg[base]!=0 ){    end = restart = findbreak(&errmsg[base],0,availablewidth);    restart += base;    while( errmsg[restart]==' ' ) restart++;    fprintf(stdout,"%s%.*s\n",prefix,end,&errmsg[base]);    base = restart;  }}/**************** From the file "main.c" ************************************//*** Main program file for the LEMON parser generator.*//* Report an out-of-memory condition and abort.  This function** is used mostly by the "MemoryCheck" macro in struct.h*/void memory_error(){  fprintf(stderr,"Out of memory.  Aborting...\n");  exit(1);}static int nDefine = 0;      /* Number of -D options on the command line */static char **azDefine = 0;  /* Name of the -D macros *//* This routine is called with the argument to each -D command-line option.** Add the macro defined to the azDefine array.*/static void handle_D_option(char *z){  char **paz;  nDefine++;  azDefine = realloc(azDefine, sizeof(azDefine[0])*nDefine);  if( azDefine==0 ){    fprintf(stderr,"out of memory\n");    exit(1);  }  paz = &azDefine[nDefine-1];  *paz = malloc( strlen(z)+1 );  if( *paz==0 ){    fprintf(stderr,"out of memory\n");    exit(1);  }  strcpy(*paz, z);  for(z=*paz; *z && *z!='='; z++){}  *z = 0;}/* The main program.  Parse the command line and do it... */int main(argc,argv)int argc;char **argv;{  static int version = 0;  static int rpflag = 0;  static int basisflag = 0;  static int compress = 0;  static int quiet = 0;  static int statistics = 0;  static int mhflag = 0;  static struct s_options options[] = {    {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."},    {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},    {OPT_FSTR, "D", (char*)handle_D_option, "Define an %ifdef macro."},    {OPT_FLAG, "g", (char*)&rpflag, "Print grammar without actions."},    {OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file"},    {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},    {OPT_FLAG, "s", (char*)&statistics,                                   "Print parser stats to standard output."},    {OPT_FLAG, "x", (char*)&version, "Print the version number."},    {OPT_FLAG,0,0,0}  };  int i;  struct lemon lem;  OptInit(argv,options,stderr);  if( version ){     printf("Lemon version 1.0\n");     exit(0);   }  if( OptNArgs()!=1 ){    fprintf(stderr,"Exactly one filename argument is required.\n");    exit(1);  }  lem.errorcnt = 0;  /* Initialize the machine */  Strsafe_init();  Symbol_init();  State_init();  lem.argv0 = argv[0];  lem.filename = OptArg(0);  lem.basisflag = basisflag;  lem.has_fallback = 0;  lem.nconflict = 0;  lem.name = lem.include = lem.arg = lem.tokentype = lem.start = 0;  lem.vartype = 0;  lem.stacksize = 0;  lem.error = lem.overflow = lem.failure = lem.accept = lem.tokendest =     lem.tokenprefix = lem.outname = lem.extracode = 0;  lem.vardest = 0;  lem.tablesize = 0;  Symbol_new("$");  lem.errsym = Symbol_new("error");  /* Parse the input file */  Parse(&lem);  if( lem.errorcnt ) exit(lem.errorcnt);  if( lem.rule==0 ){    fprintf(stderr,"Empty grammar.\n");    exit(1);  }  /* Count and index the symbols of the grammar */  lem.nsymbol = Symbol_count();  Symbol_new("{default}");  lem.symbols = Symbol_arrayof();  for(i=0; i<=lem.nsymbol; i++) lem.symbols[i]->index = i;  qsort(lem.symbols,lem.nsymbol+1,sizeof(struct symbol*),        (int(*)())Symbolcmpp);  for(i=0; i<=lem.nsymbol; i++) lem.symbols[i]->index = i;  for(i=1; isupper(lem.symbols[i]->name[0]); i++);  lem.nterminal = i;  /* Generate a reprint of the grammar, if requested on the command line */  if( rpflag ){    Reprint(&lem);  }else{    /* Initialize the size for all follow and first sets */    SetSize(lem.nterminal);    /* Find the precedence for every production rule (that has one) */    FindRulePrecedences(&lem);    /* Compute the lambda-nonterminals and the first-sets for every    ** nonterminal */    FindFirstSets(&lem);    /* Compute all LR(0) states.  Also record follow-set propagation    ** links so that the follow-set can be computed later */    lem.nstate = 0;    FindStates(&lem);    lem.sorted = State_arrayof();    /* Tie up loose ends on the propagation links */    FindLinks(&lem);    /* Compute the follow set of every reducible configuration */    FindFollowSets(&lem);    /* Compute the action tables */    FindActions(&lem);    /* Compress the action tables */    if( compress==0 ) CompressTables(&lem);    /* Reorder and renumber the states so that states with fewer choices    ** occur at the end. */    ResortStates(&lem);    /* Generate a report of the parser generated.  (the "y.output" file) */    if( !quiet ) ReportOutput(&lem);    /* Generate the source code for the parser */    ReportTable(&lem, mhflag);    /* Produce a header file for use by the scanner.  (This step is    ** omitted if the "-m" option is used because makeheaders will    ** generate the file for us.) */    if( !mhflag ) ReportHeader(&lem);  }  if( statistics ){    printf("Parser statistics: %d terminals, %d nonterminals, %d rules\n",      lem.nterminal, lem.nsymbol - lem.nterminal, lem.nrule);    printf("                   %d states, %d parser table entries, %d conflicts\n",      lem.nstate, lem.tablesize, lem.nconflict);  }  if( lem.nconflict ){    fprintf(stderr,"%d parsing conflicts.\n",lem.nconflict);  }  exit(lem.errorcnt + lem.nconflict);  return (lem.errorcnt + lem.nconflict);}/******************** From the file "msort.c" *******************************//*** A generic merge-sort program.**** USAGE:** Let "ptr" be a pointer to some structure which is at the head of** a null-terminated list.  Then to sort the list call:****     ptr = msort(ptr,&(ptr->next),cmpfnc);**** In the above, "cmpfnc" is a pointer to a function which compares** two instances of the structure and returns an integer, as in** strcmp.  The second argument is a pointer to the pointer to the** second element of the linked list.  This address is used to compute** the offset to the "next" field within the structure.  The offset to** the "next" field must be constant for all structures in the list.**** The function returns a new pointer which is the head of the list** after sorting.**** ALGORITHM:** Merge-sort.*//*** Return a pointer to the next structure in the linked list.*/#define NEXT(A) (*(char**)(((unsigned long)A)+offset))/*** Inputs:**   a:       A sorted, null-terminated linked list.  (May be null).**   b:       A sorted, null-terminated linked list.  (May be null).**   cmp:     A pointer to the comparison function.**   offset:  Offset in the structure to the "next" field.**** Return Value:**   A pointer to the head of a sorted list containing the elements**   of both a and b.**** Side effects:**   The "next" pointers for elements in the lists a and b are**   changed.*/static char *merge(a,b,cmp,offset)char *a;char *b;int (*cmp)();int offset;{  char *ptr, *head;  if( a==0 ){    head = b;  }else if( b==0 ){    head = a;  }else{    if( (*cmp)(a,b)<0 ){      ptr = a;      a = NEXT(a);    }else{      ptr = b;      b = NEXT(b);    }    head = ptr;    while( a && b ){      if( (*cmp)(a,b)<0 ){        NEXT(ptr) = a;        ptr = a;        a = NEXT(a);      }else{        NEXT(ptr) = b;        ptr = b;        b = NEXT(b);      }    }    if( a ) NEXT(ptr) = a;    else    NEXT(ptr) = b;  }  return head;}/*** Inputs:**   list:      Pointer to a singly-linked list of structures.**   next:      Pointer to pointer to the second element of the list.**   cmp:       A comparison function.**** Return Value:**   A pointer to the head of a sorted list containing the elements**   orginally in list.**** Side effects:**   The "next" pointers for elements in list are changed.*/#define LISTSIZE 30char *msort(list,next,cmp)char *list;char **next;int (*cmp)();{  unsigned long offset;  char *ep;  char *set[LISTSIZE];  int i;  offset = (unsigned long)next - (unsigned long)list;  for(i=0; i<LISTSIZE; i++) set[i] = 0;  while( list ){    ep = list;    list = NEXT(list);    NEXT(ep) = 0;    for(i=0; i<LISTSIZE-1 && set[i]!=0; i++){      ep = merge(ep,set[i],cmp,offset);      set[i] = 0;    }    set[i] = ep;  }  ep = 0;  for(i=0; i<LISTSIZE; i++) if( set[i] ) ep = merge(ep,set[i],cmp,offset);  return ep;}/************************ From the file "option.c" **************************/static char **argv;static struct s_options *op;static FILE *errstream;#define ISOPT(X) ((X)[0]=='-'||(X)[0]=='+'||strchr((X),'=')!=0)/*** Print the command line with a carrot pointing to the k-th character** of the n-th field.*/static void errline(n,k,err)int n;int k;FILE *err;{  int spcnt, i;  if( argv[0] ) fprintf(err,"%s",argv[0]);  spcnt = strlen(argv[0]) + 1;  for(i=1; i<n && argv[i]; i++){    fprintf(err," %s",argv[i]);    spcnt += strlen(argv[i])+1;  }  spcnt += k;  for(; argv[i]; i++) fprintf(err," %s",argv[i]);  if( spcnt<20 ){    fprintf(err,"\n%*s^-- here\n",spcnt,"");  }else{    fprintf(err,"\n%*shere --^\n",spcnt-7,"");  }}/*** Return the index of the N-th non-switch argument.  Return -1** if N is out of range.*/static int argindex(n)int n;{  int i;  int dashdash = 0;  if( argv!=0 && *argv!=0 ){    for(i=1; argv[i]; i++){      if( dashdash || !ISOPT(argv[i]) ){        if( n==0 ) return i;        n--;      }      if( strcmp(argv[i],"--")==0 ) dashdash = 1;    }  }  return -1;}static char emsg[] = "Command line syntax error: ";/*** Process a flag command line argument.*/static int handleflags(i,err)int i;FILE *err;{  int v;  int errcnt = 0;  int j;  for(j=0; op[j].label; j++){    if( strncmp(&argv[i][1],op[j].label,strlen(op[j].label))==0 ) break;  }  v = argv[i][0]=='-' ? 1 : 0;  if( op[j].label==0 ){    if( err ){      fprintf(err,"%sundefined option.\n",emsg);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产电影精品久久禁18| 欧美白人最猛性xxxxx69交| 国产欧美日韩精品a在线观看| 高清av一区二区| 亚洲精品视频在线看| 欧美日韩视频专区在线播放| 国内精品视频666| 伊人色综合久久天天人手人婷| 日韩一级欧美一级| 93久久精品日日躁夜夜躁欧美| 亚洲国产日韩综合久久精品| 久久久青草青青国产亚洲免观| 99riav久久精品riav| 蜜桃视频在线观看一区| 国产精品国产三级国产普通话三级 | 在线观看免费成人| 韩国中文字幕2020精品| 国产精品视频第一区| 欧美一区三区二区| 91麻豆福利精品推荐| 精品亚洲成a人在线观看| 亚洲欧美精品午睡沙发| 久久精品亚洲精品国产欧美kt∨| 欧美视频自拍偷拍| 丁香网亚洲国际| 免费在线成人网| 亚洲成人综合在线| 国产精品视频你懂的| 欧美一区二区三区影视| 在线免费不卡视频| av一二三不卡影片| 国产91丝袜在线观看| 久久国产精品露脸对白| 亚洲精品国产品国语在线app| 国产亚洲一二三区| 精品国产第一区二区三区观看体验| 欧美日韩一级二级三级| 色综合天天性综合| 不卡的av电影| 国产成人精品www牛牛影视| 蜜臀av性久久久久蜜臀aⅴ| 亚洲国产精品一区二区久久 | 国产一区二区三区香蕉| 日本三级亚洲精品| 亚洲成人av资源| 亚洲欧美日韩小说| 国产精品成人在线观看| 久久久久99精品一区| 精品精品欲导航| 欧美成人在线直播| 日韩三级在线免费观看| 欧美一区二区播放| 5858s免费视频成人| 337p亚洲精品色噜噜| av电影在线观看不卡| 99这里只有久久精品视频| 成人福利视频在线| 久久99精品久久只有精品| 日韩精品一区二区三区在线| 91精品国产综合久久香蕉的特点 | 日本福利一区二区| 欧美日韩亚洲另类| 日韩精品综合一本久道在线视频| 久久久久久久久久久黄色| 中文字幕亚洲不卡| 亚洲一卡二卡三卡四卡 | 色综合亚洲欧洲| 欧美精品国产精品| 国产亚洲1区2区3区| 亚洲色图在线看| 日韩精品电影在线| 成人免费毛片app| 欧美三级中文字幕在线观看| 欧美xxxxxxxxx| 亚洲欧美日韩一区| 激情图片小说一区| 日本国产一区二区| 欧美精品一区二区三区蜜臀| 亚洲手机成人高清视频| 另类小说一区二区三区| 99视频在线观看一区三区| 欧美一级专区免费大片| 国产精品久久久久久妇女6080 | 日韩免费观看高清完整版 | 日韩欧美在线123| 国产精品日产欧美久久久久| 午夜激情综合网| 成人a级免费电影| 欧美精选在线播放| 国产精品网站在线观看| 日韩精品欧美精品| 99久久精品国产导航| 日韩欧美卡一卡二| 亚洲电影视频在线| 东方aⅴ免费观看久久av| 欧美一二三区在线观看| 亚洲精品免费在线观看| 丰满白嫩尤物一区二区| 日韩精品一区二区三区中文精品| 亚洲美腿欧美偷拍| 成人国产精品免费观看动漫| 日韩一卡二卡三卡| 亚洲香肠在线观看| 99热这里都是精品| 日本一区二区三区高清不卡| 免费日本视频一区| 欧美系列亚洲系列| 综合自拍亚洲综合图不卡区| 国产精品亚洲一区二区三区妖精| 日韩写真欧美这视频| 亚洲一区二区三区视频在线播放| 成人毛片老司机大片| 精品国产乱码久久久久久牛牛 | 97久久精品人人爽人人爽蜜臀| 精品成人免费观看| 麻豆一区二区三| 7777精品伊人久久久大香线蕉的 | 国产91精品露脸国语对白| 欧美成人女星排行榜| 日韩精品高清不卡| 337p亚洲精品色噜噜狠狠| 亚洲一级在线观看| 欧美无乱码久久久免费午夜一区| 亚洲欧美另类小说| 一本一本大道香蕉久在线精品 | 国产精品白丝jk黑袜喷水| 日韩精品专区在线| 久久激情五月激情| 日韩一区二区三区高清免费看看| 亚洲超碰精品一区二区| 在线观看免费一区| 亚洲高清在线精品| 欧美人伦禁忌dvd放荡欲情| 亚洲国产精品视频| 在线观看日韩av先锋影音电影院| 亚洲老妇xxxxxx| 精品视频免费看| 日韩中文字幕1| 欧美一二三区在线观看| 激情综合一区二区三区| 久久久亚洲高清| 福利电影一区二区| 亚洲色图欧美偷拍| 在线观看欧美精品| 日韩情涩欧美日韩视频| 成人在线综合网站| 中文字幕的久久| 成人国产精品免费网站| 亚洲日本一区二区| 欧美日韩一区在线观看| 日本不卡中文字幕| 精品日韩欧美在线| 国产成人精品一区二| |精品福利一区二区三区| 在线观看国产91| 奇米色777欧美一区二区| 久久久另类综合| 91视视频在线直接观看在线看网页在线看| 亚洲人成人一区二区在线观看| 欧美三电影在线| 久久精品国产秦先生| 国产精品三级电影| 欧美三电影在线| 国产精品一色哟哟哟| 一区二区三区四区在线免费观看| 欧美日韩国产一级片| 国产乱理伦片在线观看夜一区| 国产精品高潮呻吟| 欧美老肥妇做.爰bbww视频| 麻豆91免费观看| 国产精品精品国产色婷婷| 欧美日韩精品免费观看视频| 狠狠色丁香婷婷综合久久片| 国产精品初高中害羞小美女文| 欧美日韩精品一区二区三区| 国产精品一区二区久久精品爱涩 | 成人动漫中文字幕| 亚洲高清在线精品| 国产日韩av一区| 欧美日韩中字一区| 成人在线视频一区二区| 亚洲国产综合在线| 欧美极品另类videosde| 在线91免费看| 97久久超碰国产精品| 久久成人羞羞网站| 亚洲午夜电影在线| 国产精品视频一二三区| 欧美一级夜夜爽| 91视频观看视频| 国产成人精品网址| 日本中文字幕一区二区视频| 国产精品久久久久精k8| 欧美变态口味重另类| 欧美日韩夫妻久久| 一本到三区不卡视频| 国产成人午夜视频| 久久福利资源站| 午夜精品福利一区二区三区av| 一色桃子久久精品亚洲|