Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define i stdin
- #define o stdout
- enum state { ignw, iwas, prpr, stmt, inqt } nfa;
- int c,tabs=0,fscc=0;
- int cprint(int t) {
- for (;t--;) putc('\t',o);
- }
- main(s,v) {
- while ((c=getc(i))!=EOF) {
- switch (c) {
- case ' ':
- case '\t':
- case '\r':
- case '\v':
- case '\f':
- case '\n':
- switch (nfa) {
- case stmt:
- nfa=iwas;
- case iwas:
- case ignw:
- continue;
- case prpr:
- nfa=(c-'\n')?nfa:ignw;
- }
- break;
- case '\\':
- switch (nfa) {
- case inqt:
- putc(c,o);
- c=getc(i);
- }
- break;
- case '\'':
- case '\"':
- switch (nfa) {
- case inqt:
- nfa=stmt;
- break;
- case iwas:
- putc(' ',o);
- case ignw:
- case stmt:
- nfa=inqt;
- }
- break;
- case '#':
- switch (nfa) {
- case inqt:
- break;
- default :
- nfa=prpr;
- }
- break;
- case ';':
- if (fscc && fscc--) {
- if (nfa==iwas)
- putc(' ',o);
- break;
- }
- switch (nfa) {
- case ignw:
- cprint(tabs);
- case stmt:
- case iwas:
- puts(";");
- nfa=ignw;
- continue;
- }
- break;
- case '{':
- case '}':
- switch (nfa) {
- case stmt:
- case iwas:
- puts("");
- case ignw:
- cprint((c-'{')?--tabs:tabs++);
- putc(c,o);
- puts("");
- nfa=ignw;
- continue;
- }
- break;
- case 'f':
- switch (nfa) {
- case iwas:
- putc(' ',o);
- case ignw:
- (nfa==ignw) && cprint(tabs);
- nfa=stmt;
- putc(c,o);
- switch (c=getc(i)) {
- case 'o':
- putc(c,o);
- switch (c=getc(i)) {
- case 'r':
- fscc=2;
- break;
- default :
- ungetc(c,i);
- continue;
- }
- break;
- default :
- ungetc(c,i);
- continue;
- }
- }
- break;
- default:
- switch (nfa) {
- case iwas:
- nfa=stmt;
- putc(' ',o);
- break;
- case ignw:
- nfa=stmt;
- cprint(tabs);
- break;
- }
- break;
- }
- putc(c,o);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement