glob [ #include #include main() { int diff; char pn1[] = "650 858-4217"; char pn2[] = "802 944-1255"; char pn3[] = "415 92323-5478"; // fails phoneNumber(&diff, pn1, strlen(pn1)); phoneNumber(&diff, pn2, strlen(pn2)); phoneNumber(&diff, pn3, strlen(pn3)); // doesn't print getchar(); } ] parse phoneNumber [ anychar[] X, Y, Z anyindex n -> ( X " " Y "-" Z ) X[ '0' <= X[n]&&X[n] <='9' && n<3 ] Y[ '0' <= Y[n]&&Y[n] <='9' && n<3 ] Z[ '0' <= Z[n]&&Z[n] <='9' && n<4 ] cond[ strlen(X)==3 && strlen(Y)==3 && strlen(Z)==4 ] [ printf("Got valid phone number: (%s) %s-%s\n",X,Y,Z); return true; ] ]