From 0384c411107672aeb4bd1134d101b5dc62cc41bb Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Thu, 5 Jan 2012 09:03:42 +1000 Subject: Clean up the parser. --- LuaSL/src/LuaSL_parser.c | 92 +++++++----------------------------------------- 1 file changed, 12 insertions(+), 80 deletions(-) (limited to 'LuaSL/src/LuaSL_parser.c') diff --git a/LuaSL/src/LuaSL_parser.c b/LuaSL/src/LuaSL_parser.c index 9e1d3ca..c6026e2 100644 --- a/LuaSL/src/LuaSL_parser.c +++ b/LuaSL/src/LuaSL_parser.c @@ -1,86 +1,18 @@ -#include "LuaSL_parser_param.h" -#include "LuaSL_yaccer.tab.h" - - -int yyparse(void *param); - -static int initParserParam(SParserParam* param) -{ - int ret = 0; - - ret = yylex_init(¶m->scanner); - param->expression = NULL; - - return ret; -} - -static int destroyParserParam(SParserParam* param) -{ - return yylex_destroy(param->scanner); -} - -SExpression *getAST(const char *expr) -{ - SParserParam p; - YY_BUFFER_STATE state; - - if ( initParserParam(&p) ) - { - // couldn't initialize - return NULL; - } - - state = yy_scan_string(expr, p.scanner); - - if ( yyparse(&p) ) - { - // error parsing - return NULL; - } - - yy_delete_buffer(state, p.scanner); - - destroyParserParam(&p); - - return p.expression; -} - -int evaluate(SExpression *e) -{ - switch(e->type) - { - case eVALUE: - return e->value; - case eMULTIPLY: - return evaluate(e->left) * evaluate(e->right); - case ePLUS: - return evaluate(e->left) + evaluate(e->right); - default: - // shouldn't be here - return 0; - } -} +#include "LuaSL_LSL_tree.h" +#include -int yyerror(const char *msg) -{ - fprintf(stderr,"Error:%s\n",msg); return 0; -} int main(void) { - SExpression *e = NULL; - char test[]=" 4 + 2*10 + 3*( 5 + 1 )"; - int result = 0; - - e = getAST(test); - - result = evaluate(e); - - printf("Result of '%s' is %d\n", test, result); - - deleteExpression(e); - - return 0; -} + char test[]=" 4 + 2*10 + 3*( 5 + 1 )"; + SExpression *e = NULL; + int result = 0; + + e = getAST(test); + result = evaluate(e); + printf("Result of '%s' is %d\n", test, result); + deleteExpression(e); + return 0; +} -- cgit v1.1