c_cpp c中自我评估型系统的原型。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp c中自我评估型系统的原型。相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

enum NodeType
{
    NODE_ADD,
    NODE_INT
};

#define NODE_BASE enum NodeType type;

#define NODE_PROPERTY(node, type, prop) (((type*)node)->prop) 

struct AbsNode
{
  NODE_BASE
};
// represents an int
struct IntNode
{
  NODE_BASE
  int val;
};

// represents an add node.
struct AddNode
{
  NODE_BASE
  struct AbsNode* lfs;
  struct AbsNode* rfs;
};

// A special type of node that represents
// Any node that is a return value.
struct ResultNode
{
  NODE_BASE
  struct IntNode _int;
  struct AddNode _add;
};




/* eval function that evaluates the nodes,
 * and stores the result in result.
 */
void eval_node(struct AbsNode* ast, struct ResultNode* result)
{
  int store;
  switch(ast->type)
  {
    case NODE_INT:
       result->_int.val = NODE_PROPERTY(ast, struct IntNode, val);
       return;
    case NODE_ADD:
       eval_node(NODE_PROPERTY(ast, struct AddNode, lfs), result);
       store = result->_int.val;
       eval_node(NODE_PROPERTY(ast, struct AddNode, lfs), result);
       result->_int.val += store;
       return;
  }
}

int main(void) {
  struct IntNode a = {NODE_INT, 40};
  struct IntNode b = {NODE_INT, 40};
  struct AddNode c = {NODE_ADD, (struct AbsNode*)&a, (struct AbsNode*)&b};
  struct ResultNode r;
  eval_node((struct AbsNode*)&c, &r);
  printf("Result is %d\n", r._int.val);
  return 0;
}

以上是关于c_cpp c中自我评估型系统的原型。的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 反应式编程系统的原型

c_cpp 这是数据块系统的原型,以动态二进制格式存储数据

创建型设计-原型模式

创建型设计-原型模式

c_cpp 可评估表达式中的新计算模型。

c_cpp 评估反向波兰表示法