/*** Example of character classification in a lexical analyzer ***/ #define is_end_of_input(ch) ((ch) == '\0') #define is_layout(ch) (!is_end_of_input(ch) && (ch) <= ' ') #define is_comment_starter(ch) ((ch) == '{') #define is_comment_stopper(ch) ((ch) == '}' ) #define is_uc_letter(ch) ('A' <= (ch) && (ch) <= 'Z') #define is_lc_letter(ch) ('a' <= (ch) && (ch) <= 'z') #define is_letter(ch) (is_uc_letter(ch) || is_lc_letter(ch)) #define is_digit(ch) ('0' <= (ch) && (ch) <= '9') #define is_letter_or_digit(ch) (is_letter(ch) || is_digit(ch)) #define is_operator(ch) (strchr("+-*/", (ch)) != 0) #define is_separator(ch) (strchr(";,()", (ch)) != 0) #define is_blank(ch) ((ch) == ' ') #define is_delim(ch) (is_operator(ch) || is_separator(ch) || is_blank(ch))