// 
// b2.c ... 構文木の構築
// 

#include <stdio.h>
#include "tokenizer.h"
#include "parser.h"

// 構文木の表示
void print(char *str, Tree *t) {
  //printf("%s: ", str); show_tree(t); putchar('\n');    // 内部構造を表示
  printf("%s: ", str); print_tree(t); putchar('\n');    // 式の文字列を表示
}

int main(void) {

  // ソースコードの文字列
  char *source[] = {
    "-1234",
    "(def x -1234)",
    "(* (+ x 1) 2)",
    "(if (< x 0) (- 0 x) x)",
    // 必要に応じて例を追加
    NULL
  };

  // 構文解析と表示
  char **p;
  for (p = source; *p != NULL; p++) {
    printf("source: \"%s\"\n", *p);
    tokenize(*p);
    init_parser();
    Tree *tree = parse_expression();    // 構文解析と構文木の構築
    print("tree", tree);
    putchar('\n');
  }

  return 0;
}