亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tree.c

?? SVMcfg: Learns a weighted context free grammar from examples. Training examples (e.g. for natural la
?? C
字號:
/* tree.c
 *
 *  Written by Mark Johnson, 27th May 1997
 */

#include "tree.h"

#include <assert.h>
#include <string.h>
#include <ctype.h>

#ifndef NDEBUG
size_t trees_allocated = 0;
size_t bintrees_allocated = 0;
#endif

tree
make_tree(si_index label, tree subtrees, tree sibling)
{
  tree t = NEW_TREE;
  t->label = label;
  t->subtrees = subtrees;
  t->sibling = sibling;
  return t;
}

void 
skipspaces(FILE *fp)
{
  int c;

  do c = getc(fp); while(isspace(c)); 	/* skip spaces */
  ungetc(c, fp);			/* push back non-space */
}

void 
skiplabel(FILE *fp)
{
  int c;

  do { c = getc(fp); assert(c!=EOF); }
  while (!isspace(c) && (c!='(') && (c!=')'));

  ungetc(c, fp);			/* push back final char */
}

si_index 
readlabel(FILE *fp, si_t si)
{
  int	 c, n=0, i=0;
  char	 s[MAXLABELLEN];

  while (((c=getc(fp))!=EOF) && !isspace(c) && (c!='(') && (c!=')') ) {
    s[n++] = c;
    assert(n<MAXLABELLEN-1);		/* leave space for '\0' */
  }  
  
  assert(n>0);				/* string should be non-empty */
  ungetc(c, fp);
  skipspaces(fp);
  s[n] = '\0';

  for (i=1; i<n-1; i++)			/* don't look at 1st or last char */
    if (strchr(CATSEP,s[i])) {		/* if s[i] is in CATSEP */
      s[i] = '\0';			/*  blast it away       */
      break;
    }

  return si_string_index(si, s);
}

/* readtree assumes that fp is pointing at first nonspace char */

tree 
readtree(FILE *fp, si_t si)
{
  int 	c;
  tree  t, p;

  c = getc(fp);
  assert(c!=EOF);		/* file ended w/out closing ')' */

  switch (c) {

  case ')': 
    skipspaces(fp);
    return(NULL); break;	/* empty tree */

  case '(':			/* nonterminal */
    skipspaces(fp);
    t = NEW_TREE;
    t->label = readlabel(fp, si);
    
    t->subtrees = p = readtree(fp, si); 
    while (p) {
      p->sibling = readtree(fp, si);
      p = p->sibling;
    }
    return(t); break;
  
  default:			/* skip terminal */
    skiplabel(fp);
    skipspaces(fp);
    c = getc(fp);		/* closing bracket */
    assert(c==')');
    skipspaces(fp);
    return(NULL);
  }}

/* readtree_root reads a tree from the treebank.  It inserts
 * a ROOT label that is not present in the treebank trees
 */

tree 
readtree_root(FILE *fp, si_t si)
{
  int c;
  skipspaces(fp);
  
  c = getc(fp);
  
  if (c == EOF) 
    return NULL;
  else { 
    tree p, t = NEW_TREE;
    assert(c == '(');
    skipspaces(fp);
    t->label = si_string_index(si, ROOT);
    t->sibling = NULL;
    t->subtrees = p = readtree(fp, si);
    assert(t->subtrees);		/* tree should be nonempty */
    while (p) {
      p->sibling = readtree(fp, si);
      p = p->sibling;
    }
    return t;
  }}

void 
write_tree(FILE *fp, const tree t, si_t si)
{
  if (t->subtrees) {
    tree p;

    fprintf(fp, "(%s", si_index_string(si, t->label));
    
    for (p = t->subtrees; p; p = p->sibling) {
      fprintf(fp, " ");
      write_tree(fp, p, si);
    }

    fprintf(fp, ")");
  }
  else 
    fprintf(fp, "%s", si_index_string(si, t->label));
}

static void 
write_prolog_tree_(FILE *fp, const tree t, si_t si)
{
  char *s = si_index_string(si, t->label);
  
  fprintf(fp, "%s", s);
  if (t->subtrees) {
    tree p;
    
    if (s[0] != '\'')
      fprintf(fp, " ");
    fprintf(fp, "/[");
    
    for (p = t->subtrees; p; p = p->sibling) {
      write_prolog_tree_(fp, p, si);
      
      if (p->sibling)
	fprintf(fp, ",");
    }

    fprintf(fp, "]");
  }
}

void 
write_prolog_tree(FILE *fp, const tree t, si_t si)
{
  write_prolog_tree_(fp, t, si);
  fprintf(fp, ".\n");
}

void 
display_tree(FILE *fp, const tree t, si_t si, int indent)
{
  int  i;
  char *label = si_index_string(si, t->label);

  if (t->subtrees) {
    tree p;

    fprintf(fp, "(%s ", label);
    indent += strlen(label) + 2; 	/* for '(' + space */
    display_tree(fp, p = t->subtrees, si, indent);

    while ((p = p->sibling)) {
      printf("\n");
      for (i=0; i<indent; i++)
	fprintf(fp, " ");
      display_tree(fp, p, si, indent);
    }
    fprintf(fp, ")");
  }
  else {
    fprintf(fp, "%s", label);
  }}

void 
free_tree(tree t)
{
  if (t) {
    free_tree(t->sibling);
    free_tree(t->subtrees);
    FREE_TREE(t);
  }}

void 
write_bintree(FILE *fp, const bintree t, si_t si)
{
  if (t->left) {
    fprintf(fp, "(%s ", si_index_string(si, t->label));
    write_bintree(fp, t->left, si);
    if (t->right) {
      fprintf(fp, " ");
      write_bintree(fp, t->right, si);
    }
    fprintf(fp, ")");
  }
  else 
    fprintf(fp, "%s", si_index_string(si, t->label));
}

void 
display_bintree(FILE *fp, const bintree t, si_t si, int indent)
{
  int  i;
  char *label = si_index_string(si, t->label);

  if (t->left) {
    fprintf(fp, "(%s ", label);
    indent += strlen(label) + 2; 	/* for '(' + space */
    display_bintree(fp, t->left, si, indent);

    if (t->right) {
      printf("\n");
      for (i=0; i<indent; i++)
	fprintf(fp, " ");
      display_bintree(fp, t->right, si, indent);
    }
    fprintf(fp, ")");
  }
  else {
    fprintf(fp, "%s", label);
  }}

void
free_bintree(bintree t)
{
  if (t) {
    free_bintree(t->left);
    free_bintree(t->right);
    FREE_BINTREE(t);
  }}

tree 
collapse_identical_unary(const tree t)
{
  if (!t) 
    return NULL;
  else {
    tree p, c = NEW_TREE;
    c->label = t->label;
    c->sibling = collapse_identical_unary(t->sibling);
    p = t->subtrees;
    while (p && !p->sibling && p->label == t->label)
      p = p->subtrees;
    c->subtrees = collapse_identical_unary(p);
    return c;
  }}


static void right_binarize_label(char *s, const tree t, si_t si); 
	/* saves label for new binary node in *s */

static bintree right_binarize_helper(const tree t0, si_t si);
	/* binarizes non-left-edge nodes */

/* right_binarize_label loads *s with the concatenation of the labels
 * of t and its siblings 
 */

static void 
right_binarize_label(char *s, const tree t, si_t si)
{
  tree p;
  int  i = 0;
  char *l;

  for (l=si_index_string(si,t->label); *l; l++) {	/* copy first label */
    assert(i<MAXBLABELLEN); 
    s[i++] = *l;
  }

  for (p=t->sibling; p; p=p->sibling) {
    assert(i<MAXBLABELLEN);
    s[i++] = BINSEP;					/* copy category separator */

    for (l=si_index_string(si,p->label); *l; l++) {	/* copy next label */
      assert(i<MAXBLABELLEN); 
      s[i++] = *l;
    }}

  assert(i<MAXBLABELLEN);
  s[i++] = '\0';
}

/* right_binarize_helper builds a new bintree node corresponding to t0,
 * which is assumed to be a node not on the left edge of its local tree
 */

static bintree 
right_binarize_helper(const tree t0, si_t si)
{
  bintree t;

  if (t0->sibling) {
    char s[MAXBLABELLEN];
    t = NEW_BINTREE;
    right_binarize_label(s, t0, si);
    t->label = si_string_index(si, s);
    t->left = right_binarize(t0, si);
    t->right = right_binarize_helper(t0->sibling, si);
  }
  else
    t = right_binarize(t0, si);

  return t;
}
    
bintree 
right_binarize(const tree t0, si_t si)
{
  bintree t = NEW_BINTREE;

  t->label = t0->label;

  if (t0->subtrees) {
    t->left = right_binarize(t0->subtrees, si);
    t->right = t0->subtrees->sibling ? 
      right_binarize_helper(t0->subtrees->sibling, si) : NULL;
  }
  else {
    t->left = NULL;
    t->right = NULL;
  }

  return t;
}

static int
append_string(char s[], int i, const char *s0)
{
  while (*s0) {
    assert(i<MAXBLABELLEN-1);	/* leave space for '\0' */
    s[i++] = *s0++;
  }
  s[i] = '\0';
  return i;
}
  

/* right_binarize_helper builds a new bintree node corresponding to t0,
 * which is assumed to be a node not on the left edge of its local tree
 */

static bintree 
td_right_binarize_helper(const tree t0, si_t si, char *s, int i)
{
  bintree t;

  if (t0->sibling) {
    t = NEW_BINTREE;
    t->label = si_string_index(si, s);
    t->left = td_right_binarize(t0, si);
    s[i++] = BINSEP;
    i = append_string(s, i, si_index_string(si, t0->label));
    t->right = td_right_binarize_helper(t0->sibling, si, s, i);
  }
  else
    t = td_right_binarize(t0, si);

  return t;
}
    
bintree 
td_right_binarize(const tree t0, si_t si)
{
  bintree t = NEW_BINTREE;

  t->label = t0->label;

  if (t0->subtrees) {
    t->left = td_right_binarize(t0->subtrees, si);
    
    if (t0->subtrees->sibling) {
      char s[MAXBLABELLEN];
      int  i = append_string(s, 0, si_index_string(si, t0->label));
      s[i++] = BINSEP;
      i = append_string(s, i, si_index_string(si, t0->subtrees->label));
      t->right = td_right_binarize_helper(t0->subtrees->sibling, si, s, i);
    }
    else
      t->right = NULL;
  }
  else {
    t->left = NULL;
    t->right = NULL;
  }

  return t;
}

static tree
bintree_tree_(const bintree bt, const si_t si, tree sibling)
{
  if (!bt) {
    assert(!sibling);		/* should be no sibling to right of empty (left) node */
    return NULL;
  }

  if (strchr(si_index_string(si, bt->label), BINSEP))
    return bintree_tree_(bt->left, si, bintree_tree_(bt->right, si, sibling));
  else {
    tree t = bintree_tree(bt, si);
    t->sibling = sibling;
    return t;
  }}
    

tree
bintree_tree(const bintree bt, const si_t si)
{
  tree t = NEW_TREE;

  t->label = bt->label;
  t->sibling = NULL;
  t->subtrees = bintree_tree_(bt->left, si, bintree_tree_(bt->right, si, NULL));
  return t;
}

static size_t 
tree_terms_(tree t, vindex ts, size_t i) 
{
  for ( ; t; t=t->sibling)
    if (t->subtrees)
      i = tree_terms_(t->subtrees, ts, i);
    else {
      if (i >= ts->n) {
	ts->n *= 2;
	vindex_resize(ts, ts->n);
      }
      assert(ts->n > i);
      ts->e[i++] = t->label;
    }
  return i;
}

struct vindex 
tree_terms(tree t)
{
  struct vindex ts;

  ts.n = 8;
  ts.e = MALLOC(ts.n*sizeof(*ts.e));

  ts.n = tree_terms_(t, &ts, 0);
  ts.e = REALLOC(ts.e, ts.n*sizeof(*ts.e));

  return ts;
}

static tree 
annotate_with_parent_(tree t0, si_t si, char *parent_label)
{
  if (t0) {
    char *label = si_index_string(si, t0->label);
    tree t = NEW_TREE;
    
    if (parent_label && t0->subtrees) {
      char s[MAXBLABELLEN];
      int  i = append_string(s, 0, label);
      s[i++] = PARENTSEP;
      append_string(s, i, parent_label);
      t->label = si_string_index(si, s);
    }
    else
      t->label = t0->label;
    
    t->sibling = annotate_with_parent_(t0->sibling, si, parent_label);
    t->subtrees = annotate_with_parent_(t0->subtrees, si, label);
  
    return t;
  }
  else
    return NULL;
}

tree
annotate_with_parent(tree t, si_t si)
{
  return annotate_with_parent_(t, si, NULL);
}

tree
remove_parent_annotation(tree t0, si_t si)
{
  if (t0) {
    tree t = NEW_TREE;
    t->label = remove_parent_from_label(t0->label,si);
    t->subtrees = remove_parent_annotation(t0->subtrees, si);
    t->sibling = remove_parent_annotation(t0->sibling, si);
    return t;
  }
  else
    return NULL;
}

/* added by thorsten */
si_index remove_parent_from_label(si_index l, si_t si)
{
  char s[MAXBLABELLEN];
  char *p = si_index_string(si, l);
    
  assert(strlen(p) < MAXBLABELLEN);
  strcpy(s, p);
    
  if (strchr(s, BINSEP)) { /* cannot remove label from binarized rules */
    return(l);
  }
  if ((p = strchr(s, PARENTSEP))) {
    assert(p-s < MAXBLABELLEN);
    *p = '\0';
    return(si_string_index(si, s));
  }
  return(l);
}

int is_not_binarized(si_index l, si_t si)
{
  char *p = si_index_string(si, l);
  if (strchr(p, BINSEP)) { 
    return(0);
  }
  return(1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
伊人夜夜躁av伊人久久| 成人免费观看av| 国v精品久久久网| 欧美日本一区二区三区四区 | 本田岬高潮一区二区三区| 欧美性感一区二区三区| 久久精品一区二区| 免费看欧美女人艹b| 99久久精品国产麻豆演员表| 日韩欧美一级二级三级久久久 | 国产欧美精品一区二区色综合朱莉| 亚洲国产精品自拍| 成人国产亚洲欧美成人综合网 | 国产精品毛片大码女人| 九九**精品视频免费播放| 欧美综合一区二区| 最新欧美精品一区二区三区| 国产一区二区三区精品视频| 91精品国产一区二区三区蜜臀| 亚洲激情av在线| 99久久精品国产导航| 国产欧美一区二区精品忘忧草| 精品制服美女久久| 日韩女优av电影| 蜜桃av噜噜一区| 日韩一二在线观看| 美女www一区二区| 欧美一区永久视频免费观看| 亚洲一区二区免费视频| 欧美综合在线视频| 午夜欧美视频在线观看| 欧美色图在线观看| 午夜一区二区三区视频| 欧美日韩视频不卡| 视频一区二区欧美| 91精品中文字幕一区二区三区| 亚洲成av人片一区二区梦乃 | 日韩欧美国产系列| 美女视频一区在线观看| 日韩免费一区二区| 国产酒店精品激情| 中文字幕av一区二区三区高| 成人a免费在线看| 一区二区三区日韩精品视频| 欧美色老头old∨ideo| 亚洲国产精品一区二区久久| 911精品国产一区二区在线| 日日骚欧美日韩| 精品国产乱码久久久久久蜜臀| 国产一区二区三区在线观看免费视频| 欧美精品一区二区三| 91精品蜜臀在线一区尤物| 日本欧美久久久久免费播放网| 91精品国产综合久久精品麻豆| 国产一区91精品张津瑜| 成人欧美一区二区三区| 欧美日韩一区中文字幕| 久久国产精品99久久人人澡| 国产亚洲午夜高清国产拍精品| jlzzjlzz亚洲女人18| 亚洲黄色录像片| 欧美成人三级电影在线| 成人少妇影院yyyy| 日韩中文字幕区一区有砖一区 | 国产一区二区三区高清播放| 国产免费成人在线视频| 欧美亚洲图片小说| 国产精一区二区三区| 亚洲视频中文字幕| 精品久久国产字幕高潮| 97久久人人超碰| 久色婷婷小香蕉久久| 国产精品福利一区| 日韩精品一区二区三区在线播放| 成人丝袜18视频在线观看| 日韩中文欧美在线| 中文字幕在线观看一区二区| 日韩一区二区三免费高清| 99久久伊人网影院| 久久电影国产免费久久电影| 亚洲免费视频中文字幕| 久久免费国产精品| 91精品国产综合久久香蕉麻豆| 成人涩涩免费视频| 国产一区二区不卡| 日韩av一区二| 亚洲午夜久久久久久久久电影网 | 国产成人亚洲精品青草天美| 亚洲图片自拍偷拍| 日韩毛片视频在线看| 久久这里只有精品首页| 5月丁香婷婷综合| 一本色道a无线码一区v| 成人一区二区三区视频 | 欧美zozozo| 欧美精品第1页| 色94色欧美sute亚洲线路二| 国内精品伊人久久久久av一坑 | 国产精品成人午夜| 久久亚洲综合色| 欧美电影免费提供在线观看| 欧美吻胸吃奶大尺度电影| 97精品电影院| 97久久精品人人爽人人爽蜜臀| 丁香五精品蜜臀久久久久99网站| 精品午夜一区二区三区在线观看| 丝袜国产日韩另类美女| 亚洲国产精品嫩草影院| 亚洲国产日韩在线一区模特| 亚洲激情自拍偷拍| 亚洲男帅同性gay1069| 综合欧美亚洲日本| 亚洲免费观看高清完整版在线观看 | 91片黄在线观看| av电影在线观看一区| 99麻豆久久久国产精品免费 | 久久精品99国产国产精| 美女高潮久久久| 精品在线一区二区| 国产成人亚洲精品狼色在线| 懂色一区二区三区免费观看 | 狠狠色狠狠色综合| 国产精品一区二区久久不卡| 国产二区国产一区在线观看| 懂色av一区二区三区免费看| 成人激情免费视频| 一本到不卡免费一区二区| 欧洲一区在线电影| 91麻豆精品国产综合久久久久久| 欧美精品电影在线播放| 精品成人在线观看| 国产精品美女久久久久久久| 亚洲九九爱视频| 婷婷亚洲久悠悠色悠在线播放| 免费观看在线色综合| 国产精品一区在线| 色综合网色综合| 91精品国产一区二区三区香蕉| 精品va天堂亚洲国产| 亚洲欧美一区二区视频| 亚洲www啪成人一区二区麻豆 | 精品日韩欧美一区二区| 久久精品一区二区三区av| 亚洲欧美另类小说视频| 日本亚洲电影天堂| 成人白浆超碰人人人人| 欧美午夜不卡在线观看免费| 欧美成人a∨高清免费观看| 国产精品美女视频| 爽爽淫人综合网网站| 成人综合在线网站| 欧美日韩一级二级| 欧美韩国日本综合| 男男成人高潮片免费网站| 高清不卡在线观看| 3atv一区二区三区| 中文字幕一区免费在线观看| 日产欧产美韩系列久久99| 成人午夜av电影| 欧美一级黄色录像| 亚洲精品国产第一综合99久久| 美女脱光内衣内裤视频久久影院| 91免费视频网址| 久久久精品欧美丰满| 亚洲成人免费看| 91网上在线视频| www精品美女久久久tv| 亚洲一区二区精品视频| jvid福利写真一区二区三区| 日韩精品在线看片z| 亚洲成人av在线电影| 成人伦理片在线| 精品国产凹凸成av人网站| 五月婷婷综合网| 色哦色哦哦色天天综合| 国产精品系列在线| 国产一区二区在线电影| 日韩一区二区三区电影| 午夜激情一区二区| 欧美性大战久久久久久久蜜臀| 国产精品免费看片| 国产成人av网站| 337p粉嫩大胆噜噜噜噜噜91av | 有码一区二区三区| 国产91精品免费| 久久综合九色欧美综合狠狠| 日本强好片久久久久久aaa| 欧美午夜精品一区二区蜜桃| 亚洲免费av网站| 色综合天天综合| 亚洲伦理在线精品| 93久久精品日日躁夜夜躁欧美| 日本一区二区三区在线不卡| 国产精品资源在线观看| 国产亚洲欧洲一区高清在线观看| 国产在线不卡一卡二卡三卡四卡| 精品美女一区二区三区| 久久99精品一区二区三区三区| 欧美一卡在线观看| 久久99蜜桃精品|