Exemple #1
0
//--------------------------------------------------------------
// 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();
}
Exemple #2
0
/*** 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;
}
Exemple #3
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 */
}
Exemple #4
0
cbool parseLexEnd( parse *p )
{
  return ( parseSpaceAndComments( p )
        && parseEnd( p )
         );
}