我的C语言解释器开源了

linxren 2012-04-06 07:14:34
下载地址:http://download.csdn.net/detail/linxren/4204728
使用说明:
#include <stdio.h>
#include <malloc.h>
#pragma comment ( lib, "xrc.lib" )

int xrc_init( void * x );
int xrc_par( void * x, char * source );
int xrc_exe( void * x, char * callname );
int xrc_done( void * x );
int xrc_reg( void * x, char * callname, void * fptr );
int xrc_string( void * x, char * source, char * callname );
int xrc_file( void * x, char * srcfile, char * callname );
int xrc_value_get( void * x, char * srcfile, char * varname, void * value );
int xrc_value_free( void * x );

/*struct _st 取消内存对齐*/
#pragma pack(1)
struct _st{
int a;
char b;
float c;
char d[100];
}st;
#pragma pack()


int reg_func( char * a )
{
printf( "%s", a );
return 0;
}

int main()
{
int i, ret;
char xbuf[4096]; /*xrc的运行空间,大小必须大于4096*/
char *source;
size_t len;
FILE *fp;


/******************************************************************
** 脚本解析测试 1
** 如果只执行一次脚本,那么可以直接调用xrc_file或者是xrc_string
*/
ret = xrc_file( xbuf, "../testsource.txt", "main" );
if( ret != 0 ){
printf( "par error: %s\n", xbuf );
return 0;
}


/******************************************************************
** 脚本解析测试 2
** 如果要多次执行一个脚本,为了提高效率,可以这么调用:
** int xrc_init( void * x );
** int xrc_par( void * x, char * source );
** int xrc_exe( void * x, char * callname ); 可以多次调用xrc_exe函数,用来多次执行一个脚本
** int xrc_done( void * x );
**
** 可以在调用xrc_int之后,调用xrc_reg注册一个函数供脚本使用
*/

/*读取脚本文件*/
if((fp = fopen( "../testsource.txt", "rb")) == NULL) return -1;
fseek( fp, 0, SEEK_END );
len = ftell( fp );
source = (char *)malloc( len+1 );
fseek( fp, 0, SEEK_SET );
if( fread( source, 1, len, fp ) != len ){
fclose( fp );
return 0;
}
source[len] = 0;
fclose( fp );

/*初始化xrc空间*/
xrc_init( xbuf );

/*注册reg_func函数为reg_test函数,在脚本中可以调用reg_test函数*/
xrc_reg( xbuf, "reg_test", reg_func );

/*解析脚本*/
ret = xrc_par( xbuf, source );
if( ret != 0 ){
printf( "par error: %s\n", xbuf );
return 0;
}

/*多次执行脚本中的main函数*/
for( i=0; i<10; i++ ){
ret = xrc_exe( xbuf, "main" );
if( ret != 0 ){
printf( "exe error: %s\n", xbuf );
return 0;
}
}

/*释放xrc空间*/
xrc_done( xbuf );
free( source );



/******************************************************************
** 变量交互测试,获取脚本中st的值
** 可以通过xrc_value_get函数来获取脚本中的全局变量的值,该函数可以很好
** 的用于配置文件的读取
*/
ret = xrc_value_get( xbuf, "../testsource.txt", "st", &st );
if( ret != 0 ){
printf( "val error: %s\n", xbuf );
return 0;
}
printf( "a = %d\n", st.a );
printf( "b = %c\n", st.b );
printf( "c = %f\n", st.c );
printf( "d = %s\n", st.d );

xrc_value_free( xbuf );


/********************************************************************
** 1. xrc支持多线程安全,执行每个线程中用不同的xbuf, 那么每个线程可以独立的
** 解析执行不同的脚本。
** 2. 不支持形如 char a[] = "asd";
*/

return 0;
}
...全文
2148 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanzic 2013-11-26
  • 打赏
  • 举报
回复
超级牛X 呀,我现正在使用,非常感谢!
彭家老三 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]
想起了以前那个说自己写了个Linux DE的水友,没有访问和下载量,就立马跑到CSDN来发帖拉人。不相信这样的举动究竟能有什么好处。
[/Quote]
这是分享精神. 我觉得IT人比其他行业最多的就是这个了.
tingfengx 2012-10-31
  • 打赏
  • 举报
回复
楼主很厉害,佩服
chenne123 2012-10-31
  • 打赏
  • 举报
回复
学习 了
wjain 2012-10-31
  • 打赏
  • 举报
回复
顶礼膜拜,有时间好好研读下。
mark
hu7324829 2012-10-31
  • 打赏
  • 举报
回复
下载来看看 支持创新。
linxren 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 的回复:]

引用 34 楼 的回复:
想起了以前那个说自己写了个Linux DE的水友,没有访问和下载量,就立马跑到CSDN来发帖拉人。不相信这样的举动究竟能有什么好处。

这是分享精神. 我觉得IT人比其他行业最多的就是这个了.
[/Quote]
能有什么好处呢,我又得不到一毛钱,仅仅是获得心理的满足感而已。
搬砖随想录 2012-10-30
  • 打赏
  • 举报
回复
果断收藏。。。
Panda_熊猫 2012-10-30
  • 打赏
  • 举报
回复
mark 一个 顶起! 有时间用用
oldness 2012-10-29
  • 打赏
  • 举报
回复
强烈支持!
manpages 2012-10-28
  • 打赏
  • 举报
回复
想起了以前那个说自己写了个Linux DE的水友,没有访问和下载量,就立马跑到CSDN来发帖拉人。不相信这样的举动究竟能有什么好处。
szj424607870 2012-10-28
  • 打赏
  • 举报
回复
初学者,纯支持
suixinpiaodang 2012-10-28
  • 打赏
  • 举报
回复
收藏。。。。
zhang198070 2012-10-28
  • 打赏
  • 举报
回复
很不错,谢谢分享.
AnYidan 2012-10-28
  • 打赏
  • 举报
回复
收藏,谢谢分享.
JiMoKuangXiangQu 2012-10-28
  • 打赏
  • 举报
回复
这个帖似曾相识.
恭喜lz.
shen_wei 2012-08-24
  • 打赏
  • 举报
回复
不错!收藏待用。
赵4老师 2012-08-24
  • 打赏
  • 举报
回复
不错!收藏待用。
ayw215 2012-08-24
  • 打赏
  • 举报
回复
bnf都有了,直接用bison/flex搞把
图灵狗 2012-08-24
  • 打赏
  • 举报
回复
强烈支持!
加载更多回复(22)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧