《python源码剖析》之实现small python

本文根据《Python源码剖析》一书,详细介绍了实现小型Python的过程,补充了书中未提及的细节,展示了运行效果,并给出了完整的代码实现。
摘要由CSDN通过智能技术生成

基本上是照着《python源码剖析》里面的代码写的,当然它有一点细节的地方没有指出来,我也就补全了一下,

先来看下运行的效果图:


下面直接上代码:

#include<iostream>
#include<string.h>
#include<iterator>
#include<stdlib.h>
#include<stdio.h>
#include<memory>
#include<map>
#include<ctype.h>
using namespace std;
#define PyObject_HEAD							\
	int refCount; \
	struct tagPyTypeObject *type

#define PyObject_HEAD_INIT(typePtr) \
	0,typePtr

typedef struct tagPyObject
{
	PyObject_HEAD;
}PyObject;

typedef void (*PrintFun)(PyObject*object);
typedef PyObject* (*AddFun)(PyObject* left,PyObject*right);
typedef long (*HashFun)(PyObject* object);

typedef struct tagPyTypeObject
{
	PyObject_HEAD;
	char* name;
	PrintFun print;
	AddFun add;
	HashFun hash;
}PyTypeObject;

PyTypeObject PyType_Type =
	{
		PyObject_HEAD_INIT(&PyType_Type),
		"type",
		0,
		0,
		0
	};

typedef struct tagIntObject
{
	PyObject_HEAD;
	int value;
}PyIntObject;

static  void int_print(PyObject*object);
static PyObject* int_add(PyObject*left,PyObject* right);
static long int_hash(PyObject* object);

PyTypeObject PyInt_Type =
	{
		PyObject_HEAD_INIT(&PyType_Type),
		"int",
		int_print,
		int_add,
		int_hash
	};


PyObject* PyInt_Create(int value)
{
	PyIntObject *object = new PyIntObject;
	object->refCount = 1;
	object->type = &PyInt_Type;
	object->value = value;
	return (PyObject*)object;
}

static  void int_print(PyObject*object)
{
	PyIntObject* intObject = (PyIntObject*)object;
	printf("%d\n",intObject->value);
}

stati
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值