资源简介
http://topic.csdn.net/u/20090602/17/f9e42b12-5923-42b6-898f-402ab4901a74.html
类型 double , 支持 常用数学函数如 sqrt , sin , cos , 用户自定义函数,等
代码片段和文件信息
/*************************************************************************/
/*
* Copyright (c) 2006 The libAppExprParser Project. All rights reserved.
*
**************************************************************************
*
* FILE NAME : /sxep/main.c
*
* CREATED : 2009-06-04 15:54:46
*
* AUTHOR : Liang.Li liangl79@gmail.com
*
**************************************************************************/
#include
#include
#include “sxep.h“
static int SXEP_test_host( SXEP_context* ctx const char* fname int argc double argv[] double* result )
{
/*
* max ( a .... )
* min ( a .... )
* rand()
*/
int i;
double r;
if( 0 == strcmp( fname “max“ ) )
{
if( 0 == argc )
return 1;
r = argv[0];
for( i = 1; i < argc; ++i )
{
if( argv[i] > r )
r = argv[i];
}
*result = r;
return 0;
}
else if( 0 == strcmp( fname “min“ ) )
{
if( 0 == argc )
return 1;
r = argv[0];
for( i = 1; i < argc; ++i )
{
if( argv[i] < r )
r = argv[i];
}
*result = r;
return 0;
}
else if( 0 == strcmp( fname “rand“ ) )
{
if( 0 != argc )
return 1;
*result = rand() * 1. / RAND_MAX;
return 0;
}
SXEP_ERROR_FNAME( “UNKNOWN user function call“ ctx );
return 1;
}
int main( int argc char* argv[] )
{
int flagf = 0;
SXEP_context ctx;
char expr [1024+1] = ““ *p expr_cp[1024+1];
ctx.ROUTINE_user_function = SXEP_test_host;
if( argc == 2 )
{
flagf = 1;
freopen( argv[1] “r“ stdin );
}
while( 1 )
{
if( ! flagf )
{
printf( “expr>“ );
fflush( stdout );
}
if( NULL == fgets( expr 1024 stdin ) )
break;
for( p = expr; *p ; ++p )
{
if( *p == ‘\n‘ ) { *p = 0; break; }
}
strcpy( expr_cp expr );
ctx.curr_input = ctx.expr = expr_cp;
if( 0 == SXEP_GRAMMER_FNAME( &ctx ) )
printf( “%s : %lg\n“ expr ctx.result );
else
fprintf( stderr “parser >>: %s :<< error\n“ expr );
}
return 0;
}
- 上一篇:仿微信红包 1
- 下一篇:一个简单的HTML网页代码
评论
共有 条评论