/* * This program reads in a program and determines whether all the * parenthesis are balanced. */ #include int main (int argc, char *argv[]) { FILE *f; char s[1000]; int i, level; /* complain if wrong # of args */ if (argc != 2) { fprintf (stderr, "Usage: %s \n", argv[0]); exit (1); } f = fopen (argv[1], "r"); /* complain if can't open file */ if (!f) { fprintf (stderr, "can't open '%s'\n", argv[1]); exit (1); } /* 0 parens seen so far */ level = 0; /* get an initial string */ fgets (s, 1000, f); /* keep getting strings.. */ while (!feof (f)) { /* count parens */ for (i=0; s[i]; i++) { if (s[i] == '(') level++; if (s[i] == ')') level--; } /* get another string */ fgets (s, 1000, f); } fclose (f); /* report results */ if (level != 0) { printf ("not balanced: level = %d\n", level); } else { printf ("balanced.\n"); } }