Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

68 строки
1.6 KiB

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define new(type) (type*)malloc(sizeof(type))
  5. #include "./helpers.c"
  6. #include "./ast.c"
  7. #include "./io.c"
  8. #include "./parse.c"
  9. #include "./built_ins.c"
  10. #include "./env.c"
  11. #include "./eval.c"
  12. void test() {
  13. // (+ 4 10)
  14. Ast_Node* nil = create_ast_node_nil();
  15. Ast_Node* ten = create_ast_node_number(10);
  16. Ast_Node* four = create_ast_node_number(4);
  17. Ast_Node* plus = create_ast_node_symbol("+");
  18. Ast_Node* minus = create_ast_node_symbol("-");
  19. Ast_Node* form1 = create_ast_node_pair(
  20. plus,
  21. create_ast_node_pair(
  22. ten,
  23. create_ast_node_pair(
  24. four,
  25. nil)));
  26. Ast_Node* form2 = create_ast_node_pair(
  27. plus,
  28. create_ast_node_pair(
  29. four,
  30. create_ast_node_pair(
  31. four,
  32. nil)));
  33. Ast_Node* root = create_ast_node_pair(
  34. minus,
  35. create_ast_node_pair(
  36. form1,
  37. create_ast_node_pair(
  38. form2,
  39. nil)));
  40. print(root);
  41. printf("\n");
  42. Ast_Node* result = eval_expr(root, new(Environment));
  43. print(result);
  44. printf("\n");
  45. }
  46. int main (int argc, char *argv[]) {
  47. /* if (argc > 1) { */
  48. /* char* fileContent = read_entire_file(argv[1]); */
  49. /* if (fileContent) { */
  50. /* printf("File: %s\n", fileContent); */
  51. /* } */
  52. /* } else { */
  53. /* printf("No source provided.\n"); */
  54. /* } */
  55. /* test(); */
  56. print(parse_expression("(+ 4 7)"));
  57. return 0;
  58. }