switch (c) { case '\n': break; case '{' : Write_Token (LEFT_CURLY_TOKEN, col); break; case '}' : Write_Token (RIGHT_CURLY_TOKEN, col); break; case '@' : Write_Token (AT_TOKEN, col); break; case '&' : Write_Token (AMPERSAND_TOKEN, col); break; case '`' : Write_Token (BACK_QUOTE_TOKEN, col); break; case '\\': Write_Token (BACK_SLASH_TOKEN, col); break; case '|' : Write_Token (BAR_TOKEN, col); break; case ':' : Write_Token (COLON_TOKEN, col); break; case ',' : Write_Token (COMMA_TOKEN, col); break; case '-' : Write_Token (DASH_TOKEN, col); break; case '$' : Write_Token (DOLLAR_TOKEN, col); break; case '=' : Write_Token (EQUALS_TOKEN, col); break; case '!' : c2 = Echo_getc(); if (c2 == (int)'=') { Write_Token (REL_NE_TOKEN, col); } else { Echo_ungetc(c2); Write_Token (EXCLAMATION_TOKEN, col); } break; case '#' : Parse_Directive(true); /* Write_Token (HASH_TOKEN, col);*/ break; case '^' : Write_Token (HAT_TOKEN, col); break; case '<' : c2 = Echo_getc(); if (c2 == (int)'=') { Write_Token (REL_LE_TOKEN, col); } else { Echo_ungetc(c2); Write_Token (LEFT_ANGLE_TOKEN, col); } break; case '(' : Write_Token (LEFT_PAREN_TOKEN, col); break; case '[' : Write_Token (LEFT_SQUARE_TOKEN, col); break; case '%' : Write_Token (PERCENT_TOKEN, col); break; case '+' : Write_Token (PLUS_TOKEN, col); break; case '?' : Write_Token (QUESTION_TOKEN, col); break; case '>' : c2 = Echo_getc(); if (c2 == (int)'=') { Write_Token (REL_GE_TOKEN, col); } else { Echo_ungetc(c2); Write_Token (RIGHT_ANGLE_TOKEN, col); } break; case ')' : Write_Token (RIGHT_PAREN_TOKEN, col); break; case ']' : Write_Token (RIGHT_SQUARE_TOKEN, col); break; case ';' : /* Parser doesn't use it, so let's ignore it */ Write_Token (SEMI_COLON_TOKEN, col); break; case '\'': Write_Token (SINGLE_QUOTE_TOKEN, col); break; /* enable C++ style commenting */ case '/' : c2 = Echo_getc(); if(c2 != (int) '/' && c2 != (int) '*') { Echo_ungetc(c2); Write_Token (SLASH_TOKEN, col); break; } if(c2 == (int)'*') { Parse_C_Comments(); break; } while(c2 != (int)'\n') { c2=Echo_getc(); if(c2==EOF) { Echo_ungetc(c2); break; } } break; case '*' : Write_Token (STAR_TOKEN, col); break; case '~' : Write_Token (TILDE_TOKEN, col); break; case '"' : Parse_String_Literal (); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': Echo_ungetc(c); if (Read_Float () != true) return; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': Echo_ungetc(c); Read_Symbol (); break; case '\t': case '\r': case '\032': /* Control Z - EOF on many systems */ case '\0': break; default: Error("Illegal character in input file, value is %02x.", c); break; } }