Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #define i stdin
  3. #define o stdout
  4.  
  5. enum state { ignw, iwas, prpr, stmt, inqt } nfa;
  6.  
  7. int c,tabs=0,fscc=0;
  8.  
  9. int cprint(int t) {
  10.     for (;t--;) putc('\t',o);
  11. }
  12.  
  13. main(s,v) {
  14.     while ((c=getc(i))!=EOF) {
  15.         switch (c) {
  16.         case  ' ':
  17.         case '\t':
  18.         case '\r':
  19.         case '\v':
  20.         case '\f':
  21.         case '\n':
  22.             switch (nfa) {
  23.             case stmt:
  24.                 nfa=iwas;
  25.             case iwas:
  26.             case ignw:
  27.                 continue;
  28.             case prpr:
  29.                 nfa=(c-'\n')?nfa:ignw;
  30.             }
  31.             break;
  32.         case '\\':
  33.             switch (nfa) {
  34.             case inqt:
  35.                 putc(c,o);
  36.                 c=getc(i);
  37.             }
  38.             break;
  39.         case '\'':
  40.         case '\"':
  41.             switch (nfa) {
  42.             case inqt:
  43.                 nfa=stmt;
  44.                 break;
  45.             case iwas:
  46.                 putc(' ',o);
  47.             case ignw:
  48.             case stmt:
  49.                 nfa=inqt;
  50.             }
  51.             break;
  52.         case '#':
  53.             switch (nfa) {
  54.             case inqt:
  55.                 break;
  56.                 default  :
  57.                 nfa=prpr;
  58.             }
  59.             break;
  60.         case ';':
  61.             if (fscc && fscc--) {
  62.                 if (nfa==iwas)
  63.                     putc(' ',o);
  64.                 break;
  65.             }
  66.             switch (nfa) {
  67.             case ignw:
  68.                 cprint(tabs);
  69.             case stmt:
  70.             case iwas:
  71.                 puts(";");
  72.                 nfa=ignw;
  73.                 continue;
  74.             }
  75.             break;
  76.         case '{':
  77.         case '}':
  78.             switch (nfa) {
  79.             case stmt:
  80.             case iwas:
  81.                 puts("");
  82.             case ignw:
  83.                 cprint((c-'{')?--tabs:tabs++);
  84.                 putc(c,o);
  85.                 puts("");
  86.                 nfa=ignw;
  87.                 continue;
  88.             }
  89.             break;
  90.         case 'f':
  91.             switch (nfa) {
  92.             case iwas:
  93.                 putc(' ',o);
  94.             case ignw:
  95.                 (nfa==ignw) && cprint(tabs);
  96.                 nfa=stmt;
  97.                 putc(c,o);
  98.                 switch (c=getc(i)) {
  99.                 case 'o':
  100.                     putc(c,o);
  101.                     switch (c=getc(i)) {
  102.                     case 'r':
  103.                         fscc=2;
  104.                         break;
  105.                         default :
  106.                         ungetc(c,i);
  107.                         continue;
  108.                     }
  109.                     break;
  110.                     default :
  111.                     ungetc(c,i);
  112.                     continue;
  113.                 }                      
  114.             }
  115.             break;
  116.         default:
  117.             switch (nfa) {
  118.             case iwas:
  119.                 nfa=stmt;
  120.                 putc(' ',o);
  121.                 break;
  122.             case ignw:
  123.                 nfa=stmt;
  124.                 cprint(tabs);
  125.                 break;
  126.             }
  127.             break;
  128.         }
  129.         putc(c,o);
  130.     }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement