Ejemplo n.º 1
0
t_result		lex_comment(t_file_reader *reader)
{
  t_position		pos;
  t_position		prev;
  char			c;

  pos = reader->cursor;
  c = string_reader_next(reader);
  if (c == COMMENT_CHAR || c == ';')
    {
      while (string_reader_has_more(reader))
	{
	  prev = reader->cursor;
	  c = string_reader_next(reader);
	  if (c == '\n')
	    {
	      reader->cursor = prev;
	      break;
	    }
	}
      return (create_result_from_comment_token(reader, pos));
    }
  reader->cursor = pos;
  return (get_null_result());
}
Ejemplo n.º 2
0
t_result		lex_multiline_comment(t_file_reader *reader)
{
  t_position		pos;
  char			c;
  char			c2;

  pos = reader->cursor;
  c = string_reader_next(reader);
  if (!string_reader_has_more(reader))
    {
      reader->cursor = pos;
      return (get_null_result());
    }
  c2 = string_reader_next(reader);
  if (c == '/' && c2 == '*')
    {
      while (string_reader_has_more(reader))
	{
	  c = c2;
	  c2 = string_reader_next(reader);
	  if (c == '*' && c2 == '/')
	    return (create_result_from_comment_token(reader, pos));
	}
      return (create_result_from_se(reader->cursor, "Unterminated comment"));
    }
  reader->cursor = pos;
  return (get_null_result());
}
Ejemplo n.º 3
0
t_result		lex_string(t_file_reader *reader)
{
  t_position		begin;
  char			c;

  begin = reader->cursor;
  c = string_reader_next(reader);
  if (c != '\"' && c != '\'')
    {
      reader->cursor = begin;
      return (get_null_result());
    }
  return (get_string_result(reader, begin, c));
}
Ejemplo n.º 4
0
void            string_reader_skip(t_string_reader *reader,
                                   const char *chars_to_skip)
{
  t_position    prev;
  char          c;

  while (string_reader_has_more(reader))
    {
      prev = reader->position;
      c = string_reader_next(reader);
      if (!string_find_char(chars_to_skip, c))
        {
          reader->position = prev;
          break;
        }
    }
}
Ejemplo n.º 5
0
t_result		get_string_result(t_file_reader *reader,
					  t_position begin, char end)
{
  char			c;
  t_position		prev;

  while (string_reader_has_more(reader))
    {
      prev = reader->cursor;
      c = string_reader_next(reader);
      if (c == end)
	return (create_result_from_string_token(reader, begin));
      else if (c == '\n')
	return (create_result_from_se(prev,
				      "String didn't ended before EOL"));
    }
  return (create_result_from_se(reader->cursor, "String isn't closed"));
}