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; } } }
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); }
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; } } }
char TLexer::GetChar() { char c; fin.get(c); if (FileEOF()) { return c; } if (c == '\n') { PosLine += 1; PosColumn = 1; } else { PosColumn += 1; } return c; }
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; } } }
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); } }
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; }
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; } } }
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; }
/*============================================================================ 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; }