Example #1
0
void TLexer::ReadNumber(std::string &value) {
    States state = State_Int;
    while (true) {
        if (FileEOF()) {
            throw new ExceptionLexerEOF(value, PosLine, PosColumn);
            break;
        }
        char c = GetChar();
        if (isdigit(c)) {
            value += c;
        } else if (c == '.' && state == State_Int) {
            state = State_Double;
            value += c;
        } else if (c == 'e' && state == State_Double) {
            char c_temp = GetChar();
            char c_temp2 = GetChar();
            if ((c_temp == '+' || c_temp == '-') && isdigit(c_temp2)) {
                value += c;
                value += c_temp;
                value += c_temp2;
            } else {
                throw new ExceptionLexerIncorrectChar(value, PosLine, PosColumn);
                break;
            }
        } else {
             IsCorrectToken(c, value, state);
             break;
        }
    }
}
Example #2
0
void TLexer::Read() {
    char c;
    std::string value = "";
    while (true) {
        c = GetChar();
        if (FileEOF()) {
            break;
        }
        value += c;
        switch (c) {
            case 34: {
                ReadString(value);
                break;
            }

            case 39: {
                ReadSymbol(value);
                break;
            }

            case '.' : {
                FindToken(State_Point, value);
                break;
            }

            case '(': {
                FindToken(State_Lbkt,value);
                break;
            }

            case ')': {
                FindToken(State_Rbkt,value);
                break;
            }
            case '#': {
                ReadSharp(value);
                break;
            }
            default: {
                if (isspecial(c) || isalpha(c)) {
                    ReadIdent(value);
                } else if (isdigit(c)) {
                    ReadNumber(value);
                } else if (IsEndToken(c)) {
                    value.erase(value.size() - 1, value.size());
                }
                break;
            }
        }
    }
    value = "EOF";
    FindToken(State_EOF, value);
}
Example #3
0
void FileGetS (char *buffer, int length, FileBuffer buf){
  int a;

  for (a = 0; a < length && !FileEOF (buf); a++){
    buffer[a] = FilePeekC (buf);
    buf->head++;
    if (a + 1 < length && buffer[a] == '\n'){
      buffer[a + 1] = '\0';
      break;
    }
  }
}
Example #4
0
char TLexer::GetChar() {
    char c;
    fin.get(c);
    if (FileEOF()) {
        return c;
    }
    if (c == '\n') {
        PosLine += 1;
        PosColumn = 1;
    } else {
        PosColumn += 1;
    }
    return c;
}
Example #5
0
void TLexer::ReadIdent(std::string &value) {
    while (true) {
        if (FileEOF()) {
            throw new ExceptionLexerEOF(value, PosLine, PosColumn);
            break;
        }
        char c = GetChar();
        if (isspecial(c) || isdigit(c) || isalpha(c)) {
            value += c;
        } else {
            IsCorrectToken(c, value, State_Ident);
            break;
        }
    }
}
Example #6
0
void ROFile::ReadBuffer(void* pBuffer, unsigned int uiBufferSize)
{
	if(!m_File)
	{
		throw FileError("NULL File pointer", EL_BAD, "ROFile::ReadBuffer", "File hasn't been opened!");
	}

	unsigned int rc = fread(pBuffer, uiBufferSize, 1, m_File);

	if(feof(m_File))
	{
		throw FileEOF(m_sFilename.c_str(), rc);
	}
	else if(ferror(m_File))
	{
		throw FileReadError(m_sFilename.c_str(), EL_BAD, "ROFile::ReadBuffer", "Error while reading file:\r\n" + m_sFilename);
	}
}
Example #7
0
char *FileGetLine (FileBuffer buf){
  int a = 0, length = 1;
  char *buffer = (char *) malloc (1 * sizeof(char));
  assert (buffer);

  while (!FileEOF (buf)){
    buffer[a] = FilePeekC (buf);
    buf->head++;
    if (buffer[a] == '\n'){
      buffer[a] = '\0';
      break;
    }
    a++;
    if (a == length){
      buffer = (char *) realloc (buffer, (length *= 2) * sizeof(char));
      assert (buffer);
    }
  }

  return buffer;
}
Example #8
0
void TLexer::ReadString(std::string &value) {
    bool IsSpecialForString = false;
    while(true) {
        if (FileEOF()) {
            throw new ExceptionLexerEOF(value, PosLine, PosColumn);
            break;
        }
        char c = GetChar();
        value += c;
        if (c == '\\' && !IsSpecialForString) {
            IsSpecialForString = true;
        } else if ((c == '\\' || c == '\"')  && IsSpecialForString) {
            IsSpecialForString = false;
            continue;
        } else if (c == '\"' && !IsSpecialForString) {
            c = GetChar();
            IsCorrectToken(c, value, State_String);
            break;
        } else if (IsSpecialForString) {
            throw new ExceptionLexerIncorrectChar(value, PosLine, PosColumn);
            break;
        }
    }
}
Example #9
0
seq* FileRead (FileBuffer buf, int start, int finish, int version){
  char* res = (char*) malloc(sizeof(char));
  int ressize = 1, numread = 0, i, numNs = 0;
  char *tempname, temp[256], currchar, *curr, *resend;
  seq* myseq = (seq*) malloc(sizeof(seq));


  if (FileEOF(buf))
    return 0;

  if (start == 1 && finish == 0) {
    start = buf->startpos;
    finish = buf->endpos;
    if (start == 0)
      start = 1;
  }

  tempname = FileGetLine (buf);
  if (tempname[0] != '>') {
    fprintf(stderr, "File is not in FASTA format!!\n");
    exit(1);
  }

  myseq->name = (char*) malloc((strlen(tempname))*sizeof(char));
  strcpy(myseq->name, tempname+1);
  if (strchr(myseq->name, '\n'))
    *(char *)(strchr(myseq->name, '\n')) = 0;

  free (tempname);

  for (i = 0; i < 256; i++){
    temp[i] = (strchr (alphabet, toupper ((char) i)) != 0) ?
      toupper((char) i) : 'N';
  }

  FileUpdate (buf);
  curr = res;
  resend = res + ressize;

  if (version == VER_ORDER || version == VER_MLAGAN){
    ressize = 2;
    numread = 1;
    if (version == VER_ORDER)
      res[0] = 0;
    else 
      res[0] = 'N';
    curr++;
  }

  while (buf->head < buf->tail || !feof (buf->data)){

    while (buf->head < buf->tail){
      currchar = *(buf->head);
      if (currchar == '>') goto outer;
      if (currchar != ' ' && currchar != '\n' && currchar != '\r' && 
	  currchar != '\t' && currchar != '\t' && currchar != '\v') {
	if (currchar == 'N') numNs++;
	*curr++ = temp[(int) currchar];
	if (curr >= resend) {
	  numread = curr - res;
	  res = (char *) realloc (res, sizeof(char) * (ressize *= 2));
	  curr = res + numread;
	  resend = res + ressize;
	}
      }
      buf->head++;
    }

    buf->tail = buf->buffer + fread (buf->buffer, sizeof(char), BUFFER_SIZE, buf->data);
    buf->head = buf->buffer;
  }
  
 outer:
  numread = curr - res;
  res[numread]=0;
  myseq->rptr = res;

  if (version == VER_FCHAOS){
    if (start > 0) {
      res[finish] = 0;
      res = &res[start-1];
      numread = finish-start+1;
    }
    myseq->numlets = numread;
  }
  else if (version == VER_ORDER){
    if (start > 0){
      res = &res[start-1];
      res[0] = 0;
      res[finish-start+2] = 0;
      numread = finish-start+2;
    }
    myseq->numlets = numread-1;
  }
  else if (version == VER_MLAGAN){
    if (start > 0 || finish > 0) {
      res[finish] = 0;
      res = &res[start-1];
      numread = finish-start+1;
    }
    myseq->numlets = numread;
    myseq->leftbound = start;
    myseq->rightbound = finish;
  }
  myseq->numsiglets = numread - numNs;
  myseq->lets = res;
  return myseq;
}
Example #10
0
/*============================================================================

  Description: See documentation for standard C library feof

  ==========================================================================*/
short palm_feof( PALM_FILE* io_pSF )
{
    ChASSERT(io_pSF->volRef == ((UInt16)-1));

    return ( fileErrEOF == FileEOF( io_pSF->file.fh ) ) ? EOF : 0;
}