int main(int argc, char ** argv)
{
  FILE *input;
  if (argc > 1) 
  {
    input = fopen(argv[1], "r");
    if (!input)
    {
      fprintf(stderr, "Error opening input file.\n");
      exit(1);
    }
  }
  else input = stdin;
  /* The default entry point is used. For other options see Parser.H */
  Program *parse_tree = pProgram(input);
  if (parse_tree)
  {
    printf("\nParse Succesful!\n");
    printf("\n[Abstract Syntax]\n");
    ShowAbsyn *s = new ShowAbsyn();
    printf("%s\n\n", s->show(parse_tree));
    printf("[Linearized Tree]\n");
    PrintAbsyn *p = new PrintAbsyn();
    printf("%s\n\n", p->print(parse_tree));
    return 0;
  }
  return 1;
}
示例#2
0
pProgram ProgramManager::get(const std::string& name) {
	for (auto& it : mProgramObjects) {
		if (it->mName == name) {
			return it->mProgram;
		}
	}
	FLOG_DEBUG("Program %s not found in manager. Returning empty pointer",
			name.c_str());
	return pProgram();
}
示例#3
0
文件: Test.c 项目: Laxa/DogeLang
int main(int argc, char ** argv)
{
  FILE  *input;
  FILE  *output;
  Program parse_tree;
  char  *str;
  char  *fileName;

  if (argc > 1)
  {
    input = fopen(argv[1], "r");
    if (!input)
    {
      fprintf(stderr, "Error opening input file.\n");
      exit(1);
    }
  }
  else input = stdin;
  /* The default entry point is used. For other options see Parser.h */
  parse_tree = pProgram(input);
  if (parse_tree)
  {
    printf("\nParse Succesful!\n");
    printf("\n[Abstract Syntax]\n");
    printf("%s\n\n", showProgram(parse_tree));
    printf("Parsing AST for doge now...\n");
    visitProgram(parse_tree);
    printf("Done!\n");
    str = printProgram(parse_tree);
    if (input != stdin)
    {
      fileName = strdup(argv[1]);
      fileName = realloc(fileName, strlen(fileName) + 3);
      strcat(fileName, ".c");
      output = fopen(fileName, "w");
      fwrite(str, strlen(str), 1, output);
      printf("Wrote program to %s\n", fileName);
      free(fileName);
    }
    else
    {
      printf("[Linearized Tree]\n");
      printf("%s\n\n", str);
    }
    if (str)
      free(str);
    return 0;
  }
  return 1;
}
示例#4
0
pProgram ProgramManager::add(
		const std::string& name,
		const std::vector<pShader>& shaders,
		GLboolean skipLinking) {
	for (auto& it : mProgramObjects) {
		if (it->mName == name) {
			return it->mProgram;
		}
	}
	ProgramObject* ptr = new ProgramObject();
	ptr->mProgram = pProgram(new core::Program(shaders, skipLinking));
	ptr->mName = name;
	mProgramObjects.push_back(puProgramObject(ptr));
	return mProgramObjects.back()->mProgram;
}
示例#5
0
Program* Parser::Parse(FILE *inp) {
  return pProgram(inp);
}