// 
// tree.h ... 構文木の基本操作のためのヘッダ
// 

#ifndef _TREE_H_INCLUDED_
#define _TREE_H_INCLUDED_

typedef struct _tree Tree;    // 構文木の型

Tree *make_number_tree(int number);    // 数の節の生成
Tree *make_name_tree(char *name);    // 名前の節の生成
Tree *make_list_tree(void);    // 空の部分木列の生成

int is_number_tree(Tree *tree);    // 数か否かの判定
int is_name_tree(Tree *tree);    // 名前か否かの判定
int is_list_tree(Tree *tree);    // 列か否かの判定

int get_number(Tree *tree);    // 数の節から数を取得
char *get_name(Tree *tree);    // 名前の節から名前を取得
void add_subtree(Tree *tree, Tree *subtree);    // 部分木列の最後に追加
int num_subtree(Tree *tree);    // 子の個数を取得
Tree *get_subtree(Tree *tree, int n);    // n番目の子を取得 (n≧0)

void show_tree(Tree *tree);    // 木をデータ構造確認用の文字列で表示
void print_tree(Tree *tree);    // 木をプログラムの文字列で表示

#endif // _TREE_H_INCLUDED_