예제 #1
0
파일: sgftree.c 프로젝트: Fierralin/gnugo
void
sgftreeCreateHeaderNode(SGFTree *tree, int boardsize, float komi, int handicap)
{
  SGFNode *root = sgfNewNode();

  sgfAddPropertyInt(root, "SZ", boardsize);
  sgfAddPropertyFloat(root, "KM", komi);
  sgfAddPropertyInt(root, "HA", handicap);
  tree->root = root;
  tree->lastnode = root;
}
예제 #2
0
static SGFNodeP
sequence(SGFNodeP n)
{
  node(n);
  while (lookahead == ';') {
    SGFNodeP new_ = sgfNewNode();
    new_->parent = n;
    n->child = new_; n = new_;
    node(n);
  }
  return n;
}
예제 #3
0
static void
gametree(SGFNodeP *p, SGFNodeP parent, int mode) 
{
  if (mode == STRICT)
    match('(');
  else
    for (;;) {
      if (lookahead == -1) {
	parse_error("Empty file?", 0);
	break;
      }
      if (lookahead == '(') {
	while (lookahead == '(')
	  nexttoken();
	if (lookahead == ';')
	  break;
      }
      nexttoken();
    }

  /* The head is parsed */
  {
    SGFNodeP head = sgfNewNode();
    SGFNodeP last;

    head->parent = parent;
    *p = head;

    last = sequence(head);
    p = &last->child;
    while (lookahead == '(') {
      gametree(p, last->parent, STRICT);
      p = &((*p)->next);
    }
    if (mode == STRICT)
      match(')');
  }
}