我的C语言解释器开源了
使用说明:
#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;
}
相关推荐
CHIP-8 SDL:使用 SDL 用 C 语言实现的 CHIP-8/SCHIP 解释器/仿真器。-开源
使用 SDL 用 C 语言实现的 CHIP-8/SCHIP 解释器/仿真器。
PicoC:谷歌推出的C语言解释器
htmltable {th, td {th {pre {简介:谷歌开源的PicoC是一个为资源受限环境设计的小型高效C语言解释器。它支持在PC、STM32微控制器等嵌入式设备以及Android平台上运行C代码,无需预编译。PicoC具有强大的可移植性,适用于教育、快速原型设计、实时系统控制和移动应用开发。开发者可以通过研究其源码学习解释器设计,并定制或增强功能。PicoC展示了C语言在多种平台的广泛应用和灵活性。
aime:一种类似于C的高级编程语言和解释器。-开源
动漫是用于应用程序扩展目的的编程语言。 它很简单,具有类似C的语法和自动资源管理功能。 解释器接口具有许多选项,用于将解释后的程序连接到嵌入应用程序状态。 它允许应用程序监督执行长度,内存分配,错误报告等方面的问题。 包含一个独立的解释器以及许多演示/测试程序。
aime:一种类似于 C 的高级编程语言和解释器。-开源
aime 是一种用于应用程序扩展目的的编程语言。 它很简单,具有类似 C 的语法和自动资源管理。 解释器接口有许多选项用于将解释的程序连接到嵌入应用程序状态。 它允许应用程序对执行长度、内存分配、错误报告等问题进行监督。 包括一个独立的解释器和许多演示/测试程序。
基于OpenSource的全文检索框架
:本文在开源(Open Souroe)项目Jakarta Lucene的基础上,结合多种开源文档格式分析工具,设计和实现了 一种可扩展的全文检索框架,该框架可高效地对XML、HTML、/VLS Word、PDF等格式的文档进行全文检索。整个框 架完全基于开源工具包,可以有效地对信息系统的开发进行支持。


