首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我的C语言解释器开源了

2013-11-29 
我的C语言解释器开源了下载地址:http://download.csdn.net/detail/linxren/4204728使用说明:#include std

我的C语言解释器开源了
下载地址: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;
}

[解决办法]
不懂C还有解释器,纯支持一下
[解决办法]
引用:
不懂C还有解释器,纯支持一下

貌似是不用编译,直接让解释器解释文件内的代码,并运行。
[解决办法]
强悍, 顶一个!
[解决办法]
强,下载下来看看。
------解决方案--------------------


厉害,膜拜。
[解决办法]
稍微简陋了些, 看着有我8年前写第一个脚本解释器的感觉.
我觉得你有必要先学一下编译原理, 先写一个LL(1)/LALR(1)的语法分析器, 或者用一个成熟的LALR的语法分析器, 比如bison什么的.
不过如果都是自己写的, 能没啥毛病跑起来也相当不错了..

[解决办法]
lz很强
[解决办法]
挺 不错的咯。

热点排行