// Process a slash, which has been seen, but not consumed static token_t* slash(lexer_t* lexer) { if(lookn(lexer, 2) == '*') return nested_comment(lexer); if(lookn(lexer, 2) == '/') return line_comment(lexer); consume_chars(lexer, 1); return make_token(lexer, TK_DIVIDE); }
int main(void) { int c; int state = NO_COMMENT; while ((c = getchar()) != EOF) { switch (state) { case NO_COMMENT: state = no_comment(c); break; case OPENING_SLASH: state = opening_slash(c); break; case C_COMMENT: state = c_comment(c); break; case CLOSING_STAR: state = closing_star(c); break; case LINE_COMMENT: state = line_comment(c); break; case IN_STRING: state = in_string(c); break; case IN_CHAR_LIT: state = in_char_lit(c); break; case STRING_ESCAPE: state = string_escape(c); break; case CHAR_LIT_ESCAPE: state = char_lit_escape(c); break; default: printf("error, unknown state: %d\n", state); return 1; } } }
void remove_comments(FILE *fp,FILE* fp1) { back_slash(fp,fp1);//function to remove backslashes line_comment(fp1);//function to remove one line comments remove_multiple_line_comment(fp1); }
mu::io::token_result mu::io::lexer::lex () { mu::io::token_result result ({nullptr, nullptr}); while (result.token == nullptr && result.error == nullptr) { auto character (source [0]); switch (character) { case U' ': case U'\f': case U'\n': case U'\r': case U'\t': case U'\0': consume (1); break; case U'[': result.token = new mu::io::left_square (mu::core::region (position, position)); consume (1); break; case U']': result.token = new mu::io::right_square (mu::core::region (position, position)); consume (1); break; case U';': result.token = new mu::io::terminator (mu::core::region (position, position)); consume (1); break; case U'\U0000FFFF': result.token = new mu::io::end (mu::core::region (position, position)); break; case U'{': result = complex_identifier (); break; case U':': { auto character2 (source [1]); switch (character2) { case U'a': case U'u': case U'[': case U']': case U';': case U'{': case U'}': case U'(': case U')': case U'f': case U'\f': case U'n': case U'\n': case U'r': case U'\r': case U't': case U'\t': case U'0': case U'\0': result = identifier (); break; case U'/': line_comment (); break; case U'*': result.error = region_comment (); break; default: { auto error (new mu::core::error_string (U"Unknown control character: ", mu::core::error_type::unknown_control_character, mu::core::region (position, position))); error->message.push_back (character2); result.error = error; break; } } break; } default: result = identifier (); break; } } return result; }