Guest User

Untitled

a guest
May 20th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. typedef enum
  2. {null, opera, var, val} NodeType;
  3.  
  4. typedef struct Node {
  5. float val;
  6. char * name; // val_name
  7. char * opr; // operator
  8. NodeType node_type;
  9. struct Node * left;
  10. struct Node * right;
  11. } Node;
  12.  
  13. Node create_op_node(char * op){
  14. Node node;
  15. node.opr = op;
  16. node.node_type = opera;
  17. return node;
  18. }
  19.  
  20. Node create_var_node(char * op){
  21. Node node;
  22. node.name = op;
  23. node.node_type = var;
  24. return node;
  25. }
  26.  
  27. Node create_val_node(float value){
  28. Node node;
  29. node.val = value;
  30. node.node_type = val;
  31. return node;
  32. }
  33.  
  34. void run_through_tree (Node *node){
  35. switch (node->node_type){
  36. case var:
  37. printf("varable name:%sn",node->name);
  38. break;
  39. case val:
  40. printf("num value:%fn",node->val);
  41. break;
  42. case opera:
  43. printf("noperator:%sn",node->opr);
  44. printf("LFSn");
  45. run_through_tree(node->left);
  46. printf("RHSn");
  47. run_through_tree(node->right);
  48. }
  49.  
  50. }
  51.  
  52. E : E T_ADD E {Node * op_node = (Node *) malloc(sizeof(Node));*op_node = create_op_node("+"); connect_node(op_node,$1,$3);$$ = op_node;}
  53. | E T_SUB E {Node * op_node = (Node *) malloc(sizeof(Node));*op_node = create_op_node("-"); connect_node(op_node,$1,$3);$$ = op_node;}
  54. | E T_MUL E {Node * op_node = (Node *) malloc(sizeof(Node));*op_node = create_op_node("*"); connect_node(op_node,$1,$3);$$ = op_node;}
  55. | E T_DIV E {Node * op_node = (Node *) malloc(sizeof(Node));*op_node = create_op_node("/"); connect_node(op_node,$1,$3);$$ = op_node;}
  56. | T_SUB E %prec NEG {
  57. Node * op_node = (Node *) malloc(sizeof(Node));
  58. Node * zero_node = (Node *) malloc(sizeof(Node));
  59. * zero_node = create_val_node(0.0);
  60. * op_node = create_op_node("-");
  61. connect_node(op_node,zero_node,$2);
  62. $$ = op_node;}
  63. | T_NUM {Node * val_node = (Node *) malloc(sizeof(Node));* val_node = create_val_node($1); $$ = val_node;}
  64. | T_VAR {Node * var_node = (Node *) malloc(sizeof(Node));* var_node = create_var_node($1); $$ = var_node;}
  65. | T_LPATH E T_RPATH {$$ = $2;}
  66. ;
  67.  
  68. operator:*
  69. LFS
  70. num value:2.000000
  71. RHS
  72.  
  73. operator:+
  74. LFS
  75. num value:3.000000
  76. RHS
  77. num value:2.000000
  78.  
  79. operator:-
  80. LFS
  81.  
  82. operator:*
  83. LFS
  84. num value:2.000000
  85. RHS
  86. varable name:a - a + 7
  87.  
  88. RHS
  89. varable name:a + 7
  90.  
  91. RHS
  92. num value:7.000000
  93.  
  94. operator:-
  95. LFS
  96.  
  97. operator:*
  98. LFS
  99. num value:2.000000
  100. RHS
  101. varable name:a
  102.  
  103. RHS
  104. varable name:a
  105.  
  106. RHS
  107. num value:7.000000
Add Comment
Please, Sign In to add comment