no flowers ccompress

no flowers ccompress

ccompress: C言語のソースから余分な空白を除去

cco.re: 原始プログラム

cco.c

/* Generated by re2c 0.12.1 on Thu Dec  6 00:40:34 2007 */
#line 1 "cco.re"
#include <stdio.h>
#define ggets(s) fgets (s, sizeof s, stdin)

enum toktyp { none, word, num, op, quote, comin, comout, comsol, space };

char *
scan (char * p, int * r_type)
{
   char * q;
#define YYCTYPE         char
#define YYCURSOR        p
#define YYLIMIT         p
#define YYMARKER        q
#define YYFILL(n)
start:

#line 20 "cco.c"
{
	YYCTYPE yych;
	unsigned int yyaccept = 0;

	if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
	yych = *YYCURSOR;
	switch(yych) {
	case 0x09:
	case 0x0A:
	case ' ':	goto yy12;
	case '"':	goto yy11;
	case '\'':	goto yy10;
	case '*':	goto yy9;
	case '/':	goto yy7;
	case '0':	goto yy2;
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':	goto yy4;
	case 'A':
	case 'B':
	case 'C':
	case 'D':
	case 'E':
	case 'F':
	case 'G':
	case 'H':
	case 'I':
	case 'J':
	case 'K':
	case 'L':
	case 'M':
	case 'N':
	case 'O':
	case 'P':
	case 'Q':
	case 'R':
	case 'S':
	case 'T':
	case 'U':
	case 'V':
	case 'W':
	case 'X':
	case 'Y':
	case 'Z':
	case '_':
	case 'a':
	case 'b':
	case 'c':
	case 'd':
	case 'e':
	case 'f':
	case 'g':
	case 'h':
	case 'i':
	case 'j':
	case 'k':
	case 'l':
	case 'm':
	case 'n':
	case 'o':
	case 'p':
	case 'q':
	case 'r':
	case 's':
	case 't':
	case 'u':
	case 'v':
	case 'w':
	case 'x':
	case 'y':
	case 'z':	goto yy5;
	default:	goto yy14;
	}
yy2:
	yyaccept = 0;
	yych = *(YYMARKER = ++YYCURSOR);
	switch(yych) {
	case '.':	goto yy38;
	case 'X':
	case 'x':	goto yy44;
	default:	goto yy43;
	}
yy3:
#line 20 "cco.re"
	{ *r_type = num;    return YYCURSOR; }
#line 112 "cco.c"
yy4:
	yyaccept = 0;
	yych = *(YYMARKER = ++YYCURSOR);
	goto yy37;
yy5:
	++YYCURSOR;
	yych = *YYCURSOR;
	goto yy35;
yy6:
#line 21 "cco.re"
	{ *r_type = word;   return YYCURSOR; }
#line 124 "cco.c"
yy7:
	++YYCURSOR;
	switch((yych = *YYCURSOR)) {
	case '*':	goto yy32;
	case '/':	goto yy30;
	default:	goto yy8;
	}
yy8:
#line 29 "cco.re"
	{ *r_type = op;     return YYCURSOR; }
#line 135 "cco.c"
yy9:
	yych = *++YYCURSOR;
	switch(yych) {
	case '/':	goto yy28;
	default:	goto yy8;
	}
yy10:
	yyaccept = 1;
	yych = *(YYMARKER = ++YYCURSOR);
	switch(yych) {
	case '\'':	goto yy8;
	case '\\':	goto yy26;
	default:	goto yy24;
	}
yy11:
	yyaccept = 1;
	yych = *(YYMARKER = ++YYCURSOR);
	goto yy18;
yy12:
	++YYCURSOR;
	yych = *YYCURSOR;
	goto yy16;
yy13:
#line 28 "cco.re"
	{ *r_type = space;  return YYCURSOR; }
#line 161 "cco.c"
yy14:
	yych = *++YYCURSOR;
	goto yy8;
yy15:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
yy16:
	switch(yych) {
	case 0x09:
	case 0x0A:
	case ' ':	goto yy15;
	default:	goto yy13;
	}
yy17:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
yy18:
	switch(yych) {
	case '"':	goto yy21;
	case '\\':	goto yy19;
	default:	goto yy17;
	}
yy19:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch(yych) {
	case '"':	goto yy23;
	case '\\':	goto yy19;
	default:	goto yy17;
	}
yy21:
	++YYCURSOR;
yy22:
#line 27 "cco.re"
	{ *r_type = quote;  return YYCURSOR; }
#line 200 "cco.c"
yy23:
	yyaccept = 2;
	YYMARKER = ++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch(yych) {
	case '"':	goto yy21;
	case '\\':	goto yy19;
	default:	goto yy17;
	}
yy24:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch(yych) {
	case '\'':	goto yy21;
	default:	goto yy24;
	}
yy26:
	yych = *++YYCURSOR;
	switch(yych) {
	case '\'':	goto yy27;
	default:	goto yy24;
	}
yy27:
	yych = *++YYCURSOR;
	switch(yych) {
	case '\'':	goto yy21;
	default:	goto yy22;
	}
yy28:
	++YYCURSOR;
#line 23 "cco.re"
	{ *r_type = comout; return YYCURSOR; }
#line 235 "cco.c"
yy30:
	++YYCURSOR;
#line 24 "cco.re"
	{ *r_type = comsol; return YYCURSOR; }
#line 240 "cco.c"
yy32:
	++YYCURSOR;
#line 22 "cco.re"
	{ *r_type = comin;  return YYCURSOR; }
#line 245 "cco.c"
yy34:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
yy35:
	switch(yych) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
	case 'A':
	case 'B':
	case 'C':
	case 'D':
	case 'E':
	case 'F':
	case 'G':
	case 'H':
	case 'I':
	case 'J':
	case 'K':
	case 'L':
	case 'M':
	case 'N':
	case 'O':
	case 'P':
	case 'Q':
	case 'R':
	case 'S':
	case 'T':
	case 'U':
	case 'V':
	case 'W':
	case 'X':
	case 'Y':
	case 'Z':
	case '_':
	case 'a':
	case 'b':
	case 'c':
	case 'd':
	case 'e':
	case 'f':
	case 'g':
	case 'h':
	case 'i':
	case 'j':
	case 'k':
	case 'l':
	case 'm':
	case 'n':
	case 'o':
	case 'p':
	case 'q':
	case 'r':
	case 's':
	case 't':
	case 'u':
	case 'v':
	case 'w':
	case 'x':
	case 'y':
	case 'z':	goto yy34;
	default:	goto yy6;
	}
yy36:
	yyaccept = 0;
	YYMARKER = ++YYCURSOR;
	if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
	yych = *YYCURSOR;
yy37:
	switch(yych) {
	case '.':	goto yy38;
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':	goto yy36;
	default:	goto yy3;
	}
yy38:
	yych = *++YYCURSOR;
	switch(yych) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':	goto yy40;
	default:	goto yy39;
	}
yy39:
	YYCURSOR = YYMARKER;
	switch(yyaccept) {
	case 0: 	goto yy3;
	case 1: 	goto yy8;
	case 2: 	goto yy22;
	}
yy40:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch(yych) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':	goto yy40;
	default:	goto yy3;
	}
yy42:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
yy43:
	switch(yych) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':	goto yy42;
	default:	goto yy3;
	}
yy44:
	yych = *++YYCURSOR;
	switch(yych) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
	case 'A':
	case 'B':
	case 'C':
	case 'D':
	case 'E':
	case 'F':
	case 'a':
	case 'b':
	case 'c':
	case 'd':
	case 'e':
	case 'f':	goto yy45;
	default:	goto yy39;
	}
yy45:
	++YYCURSOR;
	if(YYLIMIT == YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch(yych) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
	case 'A':
	case 'B':
	case 'C':
	case 'D':
	case 'E':
	case 'F':
	case 'a':
	case 'b':
	case 'c':
	case 'd':
	case 'e':
	case 'f':	goto yy45;
	default:	goto yy3;
	}
}
#line 30 "cco.re"

}

void
putnc (int n, char * cs)
{
   while (n--) putchar (*cs++);
}

int
f (int a, int b)
{
   if (a == word && b == word) return 1;
   if (a == word && b == num)  return 1;
   if (a == num  && b == word) return 1;
   if (a == num  && b == num)  return 1;
   return 0;
}

int
main (void)
{
   char * p, * pp;
   char buf[256];
   int q = none, r;

   while (pp = ggets (buf)) {
      while (*(p = scan (pp, &r))) {
         if (*pp == '#') {
            if (q != none) puts ("");
            q = none;
            fputs (pp, stdout);
            break;
         }
         if (r == comsol) break;
         // one line comment
         if (r != space) {
            if (f (q, r)) putchar (' ');

            putnc (p - pp, pp);
         }
         pp = p;
         if (r != space) q = r;
      }
   }
   putchar ('\n');
   return 0;
}
Ray Misaki <raymisaki@yahoo.co.jp>