Esempio n. 1
0
// 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);
}
Esempio n. 2
0
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;
    }
  }
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}