/* recursive recognizer */
#define GNC() ch=*++txt
#define NO() printf("no\n"), exit(1)
#define YES() printf("yes\n")
static char *txt;
static char ch;
static void P(void); /* C forward declarations */
static void D(void);
static void C(void);
static void N(void);
static void B(void);
static void
D(void) {
C();
while (ch=='|') {
GNC(); /* discard | */
C();
}
}
static void
C(void) {
N();
while (ch=='&') {
GNC(); /* discard & */
N();
}
}
static void
N(void) {
if (ch == '~') {
GNC(); /* discard ~ */
B();
} else {
B();
}
}
static void
B(void) {
switch (ch) {
case 't':
GNC(); /* discard t */
break;
case 'f':
GNC(); /* discard f */
break;
case '(':
GNC(); /* discard ( */
D();
if (ch != ')') NO();
GNC(); /* discard ) */
break;
default:
NO();
break;
}
}
static void
P(void) {
D();
if (ch != 0) NO(); /* null terminated */
}
int
main(int argc, char **argv) {
txt = argv[1];
ch = *txt; /* first char */
P();
YES();
return 0;
}
|
Created:
|
March 29, 2001
|
|
Last modified:
|
May 29, 2007
|