Ejemplo n.º 1
0
int match_tree(tree *t1,tree *t2)
{
	if(t1==NULL && t2==NULL)
		return 1;
	if(t1==NULL || t2==NULL)
		return 0;
	if(t1->element==t2->element)
		return match_tree(t1->left,t2->left)&&match_tree(t1->right,t2->right);
}
int match_tree(TREE_NODE T1, TREE_NODE T2){

  if((T1 == NULL)&&(T2 == NULL))
    return 1;
  if((T1 == NULL)||(T2 == NULL))
    return 0;
  if(T1->element != T2->element)
    return 0;

  return (match_tree(T1->left, T2->left) && match_tree(T1->right, T2->right));
}
Ejemplo n.º 3
0
int subtree(tree *t1,tree *t2)
{
	if(t1==NULL)
		return 0;

	if(t1->element==t2->element)
		if(match_tree(t1,t2))
			return 1;
	return subtree(t1->left,t2)||subtree(t1->right,t2);
}
int sub_tree(BTREE T1, BTREE T2){

  if(T1 == NULL){
    printf("shit\n");
    return 0;
  }
  if(T1->element == T2->element){
    if(match_tree(T1, T2)) 
      return 1;
  }
   
  return (sub_tree(T1->left, T2) ||sub_tree(T1->right, T2));
}
Ejemplo n.º 5
0
    void operator()(const hypergraph_type& graph_in, IteratorTree tree_iter, IteratorRule rule_iter)
    {
      if (! graph_in.is_valid()) return;
      
      phrase_map.clear();
      phrase_map.reserve(graph_in.nodes.size());
      phrase_map.resize(graph_in.nodes.size());
      
      // bottom-up topological order
      for (size_t id = 0; id != graph_in.nodes.size(); ++ id) {
	match_tree(id, graph_in, tree_iter);
	
	if (! grammar.empty())
	  match_phrase(id, graph_in, rule_iter);
      }
    }