⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fini.c

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 C
📖 第 1 页 / 共 2 页
字号:
	      = cc;	}      newname->name_uc[i] = newname->name_lc[i] = newname->name_ic[i] = '\0';      /* Warn user if names aren't alphabetically ordered. */      if ((last_buf[0] != '\0')	  && (strcmp (last_buf, newname->name_uc) >= 0))	{	  fprintf (stderr, "%s: \"%s\" precedes \"%s\"\n", input_name,		   last_buf, newname->name_uc);	  do_exit = TRUE;	}      strcpy (last_buf, newname->name_uc);      /* Append name to end of alpha-sorted list (assumes names entered in	 alpha order wrt name, not kwname, even though kwname is output from	 this list). */      n = names_alpha.last;      newname->next_alpha = n->next_alpha;      newname->previous_alpha = n;      n->next_alpha->previous_alpha = newname;      n->next_alpha = newname;      /* Insert name in appropriate length/name ordered list. */      n = (name) &names[len];      while ((n->next != (name) &names[len])	     && (strcmp (buf, n->next->name_uc) > 0))	n = n->next;      if (strcmp (buf, n->next->name_uc) == 0)	{	  fprintf (stderr, "%s: extraneous \"%s\"\n", input_name, buf);	  do_exit = TRUE;	}      newname->next = n->next;      newname->previous = n;      n->next->previous = newname;      n->next = newname;    }#if 0  for (len = 0; len < ARRAY_SIZE (name); ++len)    {      if (names[len].first == (name) &names[len])	continue;      printf ("Length %d:\n", len);      for (n = names[len].first; n != (name) &names[len]; n = n->next)	printf ("    %s %s %s\n", n->name_uc, n->name_lc, n->name_ic);    }#endif  if (do_exit)    exit (1);  /* First output the #include file. */  for (n = names_alpha.first; n != (name) &names_alpha; n = n->next_alpha)    {      fprintf (incl, "#define %sl%s%s %d\n", prefix, n->kwname, postfix,	       n->namelen);    }  fprintf (incl,	   "\\n\enum %s_\n\{\n\%sNone%s,\n\",	   type, prefix, postfix);  for (n = names_alpha.first; n != (name) &names_alpha; n = n->next_alpha)    {      fprintf (incl,	       "\%s%s%s,\n\",	       prefix, n->kwname, postfix);    }  fprintf (incl,	   "\%s%s\n\};\n\typedef enum %s_ %s;\n\",	   prefix, postfix, type, type);  /* Now output the C program. */  fprintf (out,	   "\%s%s\n\%s (ffelexToken t)\n\%c\n\  char *p;\n\  int c;\n\\n\  p = ffelex_token_text (t);\n\\n\",	   storage, type, routine, '{');  if (do_name)    {      if (do_names)	fprintf (out,		 "\  if (ffelex_token_type (t) == FFELEX_typeNAME)\n\    {\n\      switch (ffelex_token_length (t))\n\\t{\n\"	  );      else	fprintf (out,		 "\  assert (ffelex_token_type (t) == FFELEX_typeNAME);\n\\n\  switch (ffelex_token_length (t))\n\    {\n\"	  );/* Now output the length as a case, followed by the binary search within that length.  */      for (len = 0; ((size_t) len) < ARRAY_SIZE (names); ++len)	{	  if (names[len].first != (name) &names[len])	    {	      if (do_names)		fprintf (out,			 "\\tcase %d:\n\",			 len);	      else		fprintf (out,			 "\    case %d:\n\",			 len);	      testname (FALSE, do_names ? 10 : 6, names[len].first, names[len].last);	      if (do_names)		fprintf (out,			 "\\t  break;\n\"		  );	      else		fprintf (out,			 "\      break;\n\"		  );	    }	}      if (do_names)	fprintf (out,		 "\\t}\n\      return %sNone%s;\n\    }\n\\n\",		 prefix, postfix);      else	fprintf (out,		 "\    }\n\\n\  return %sNone%s;\n\}\n\",		 prefix, postfix);    }  if (do_names)    {      fputs ("\  assert (ffelex_token_type (t) == FFELEX_typeNAMES);\n\\n\  switch (ffelex_token_length (t))\n\    {\n\    default:\n\",	     out);      /* Find greatest non-empty length list. */      for (len = ARRAY_SIZE (names) - 1;	   names[len].first == (name) &names[len];	   --len)	;/* Now output the length as a case, followed by the binary search within that length. */      if (len > 0)	{	  for (; len != 0; --len)	    {	      fprintf (out,		       "\    case %d:\n\",		       len);	      if (names[len].first != (name) &names[len])		testnames (FALSE, 6, len, names[len].first, names[len].last);	    }	  if (names[1].first == (name) &names[1])	    fprintf (out,		     "\      ;\n\"	      );		/* Need empty statement after an empty case				   1:  */	}      fprintf (out,	       "\    }\n\\n\  return %sNone%s;\n\}\n\",	       prefix, postfix);    }  if (out != stdout)    fclose (out);  if (incl != stdout)    fclose (incl);  if (in != stdin)    fclose (in);  exit (0);}voidtestname (bool nested, int indent, name first, name last){  name n;  name nhalf;  int num;  int numhalf;  assert (!nested || indent >= 2);  assert (((size_t) indent) + 4 < ARRAY_SIZE (xspaces));  num = 0;  numhalf = 0;  for (n = first, nhalf = first; n != last->next; n = n->next)    {      if ((++num & 1) == 0)	{	  nhalf = nhalf->next;	  ++numhalf;	}    }  if (nested)    fprintf (out,	     "\%s{\n\",	     xspaces[indent - 2]);  fprintf (out,	   "\%sif ((c = ffesrc_strcmp_2c (ffe_case_match (), p, \"%s\", \"%s\", \"%s\")) == 0)\n\%sreturn %s%s%s;\n\",	   xspaces[indent], nhalf->name_uc, nhalf->name_lc, nhalf->name_ic,	   xspaces[indent + 2], prefix, nhalf->kwname, postfix);  if (num != 1)    {      fprintf (out,	       "\%selse if (c < 0)\n\",	       xspaces[indent]);      if (numhalf == 0)	fprintf (out,		 "\%s;\n\",		 xspaces[indent + 2]);      else	testname (TRUE, indent + 4, first, nhalf->previous);      if (num - numhalf > 1)	{	  fprintf (out,		   "\%selse\n\",		   xspaces[indent]);	  testname (TRUE, indent + 4, nhalf->next, last);	}    }  if (nested)    fprintf (out,	     "\%s}\n\",	     xspaces[indent - 2]);}voidtestnames (bool nested, int indent, int len, name first, name last){  name n;  name nhalf;  int num;  int numhalf;  assert (!nested || indent >= 2);  assert (((size_t) indent) + 4 < ARRAY_SIZE (xspaces));  num = 0;  numhalf = 0;  for (n = first, nhalf = first; n != last->next; n = n->next)    {      if ((++num & 1) == 0)	{	  nhalf = nhalf->next;	  ++numhalf;	}    }  if (nested)    fprintf (out,	     "\%s{\n\",	     xspaces[indent - 2]);  fprintf (out,	   "\%sif ((c = ffesrc_strncmp_2c (ffe_case_match (), p, \"%s\", \"%s\", \"%s\", %d)) == 0)\n\%sreturn %s%s%s;\n\",	   xspaces[indent], nhalf->name_uc, nhalf->name_lc, nhalf->name_ic,	   len, xspaces[indent + 2], prefix, nhalf->kwname, postfix);  if (num != 1)    {      fprintf (out,	       "\%selse if (c < 0)\n\",	       xspaces[indent]);      if (numhalf == 0)	fprintf (out,		 "\%s;\n\",		 xspaces[indent + 2]);      else	testnames (TRUE, indent + 4, len, first, nhalf->previous);      if (num - numhalf > 1)	{	  fprintf (out,		   "\%selse\n\",		   xspaces[indent]);	  testnames (TRUE, indent + 4, len, nhalf->next, last);	}    }  if (nested)    fprintf (out,	     "\%s}\n\",	     xspaces[indent - 2]);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -