//-------------------------------------------------------------- // parse a file void mgXMLScanner::parseFile( const char* fileName) { m_sourceFileName = fileName; mgOSFixFileName(m_sourceFileName); FILE* inFile = mgOSFileOpen(m_sourceFileName, "rb"); if (inFile == NULL) throw new mgErrorMsg("xmlFileNotFound", "filename", "%s", (const char*) m_sourceFileName); char* buffer = new char[PARSE_BUFFER_SIZE]; while (true) { size_t len = fread(buffer, 1, PARSE_BUFFER_SIZE, inFile); if (len <= 0) break; // parse buffer of file data parse((int) len, buffer); } delete buffer; fclose(inFile); // end of input parseEnd(); }
/*** Parse a statement ***/ Node* Parser::parseStatement() { if(hasTokens(2) && peekToken().getType() == T_IDENTIFIER && peekToken(2).getType() == T_ASSIGN) return parseAssign(); if(hasTokens(2) && peekToken().getType() == T_IDENTIFIER && peekToken(2).getType() == T_LPAREN) return parseCall(); if(hasTokens() && peekToken().getType() == T_CALL) return parseCall(); if(hasTokens() && peekToken().getType() == T_CASE) return parseCase(); if(hasTokens() && peekToken().getType() == T_DO) return parseDo(); if(hasTokens() && peekToken().getType() == T_END) return parseEnd(); if(hasTokens() && peekToken().getType() == T_EXIT) return parseExit(); if(hasTokens() && peekToken().getType() == T_FOR) return parseFor(); if(hasTokens() && peekToken().getType() == T_IF) return parseIf(); if(hasTokens() && peekToken().getType() == T_INPUT) return parseInput(); if(hasTokens() && peekToken().getType() == T_OUTPUT) return parseOutput(); if(hasTokens() && peekToken().getType() == T_REPEAT) return parseRepeat(); if(hasTokens() && peekToken().getType() == T_RETURN) return parseReturn(); if(hasTokens(2) && peekToken(1).getType() == T_IDENTIFIER && peekToken(2).getType() == T_LBRACKET) return parseSliceSelectAssign(); if(hasTokens() && peekToken().getType() == T_WHILE) return parseWhile(); throw ParserSyntaxException(getToken(), "Invalid statement!"); return 0; }
int datareader_tmy3_eof(DataReader *d){ parse *p = DATA(d)->p; if(parseEnd(p)){ CONSOLE_DEBUG("REACHED END OF FILE"); if(d->i < d->ndata){ ERROR_REPORTER_HERE(ASC_PROG_WARNING,"Incomplete data set found (%d rows < %d expected",d->i, d->ndata); } d->ndata=d->i; int i;double tmin = +0.5*DBL_MAX,tmax = -0.5*DBL_MAX; for(i=0; i<d->ndata; ++i){ double t = DATA(d)->rows[i].t; if(t < tmin)tmin = t; if(t > tmax)tmax = t; } ERROR_REPORTER_HERE(ASC_PROG_NOTE,"Read %d rows, t in range [%f,%f] d",d->ndata,tmin/3600./24.,tmax/3600./24.); return 1; /* yes, end of file */ } return 0; /* no, more data still */ }
cbool parseLexEnd( parse *p ) { return ( parseSpaceAndComments( p ) && parseEnd( p ) ); }