diff options
Diffstat (limited to 'src/Expression.c')
-rw-r--r-- | src/Expression.c | 98 |
1 files changed, 30 insertions, 68 deletions
diff --git a/src/Expression.c b/src/Expression.c index 4065d90..174698e 100644 --- a/src/Expression.c +++ b/src/Expression.c @@ -16,7 +16,7 @@ #include <stdlib.h> #include <string.h> -#include "http_Expression.h" +#include "Expression.h" static const char *rcsid = "$Header$"; @@ -89,26 +89,19 @@ static void FreeTokens(pToken *list); @@*/ char *HTTP_ExpressionParse(const char *expression) { - pToken *list; - pToken *temp; - - char *buffer; - int buffer_length; - - buffer_length = INITIAL_BUFFER_LENGTH; - - buffer = (char *)malloc(buffer_length); + int buffer_length = INITIAL_BUFFER_LENGTH; + char *buffer = (char *)malloc(buffer_length); if(buffer) { /* Split the list into tokens */ - list = Tokenise(expression); + pToken *list = Tokenise(expression); + pToken *temp = list; #ifdef TEST_HTTP_EVALUATE printtokens(list); #endif - temp = list; /* Convert the list into a string in RPN order */ buffer = RPParse(&temp, buffer, &buffer_length); @@ -138,14 +131,10 @@ double HTTP_ExpressionEvaluate(char *buffer, double (*eval)(const char *, void *), void *data) { - char *first; - char *token; double stack[MAX_STACK_SIZE]; - int stackpointer; - - - first = buffer; - stackpointer = 0; + int stackpointer = 0; + char *first = buffer; + char *token; /* Tokens are seperated by @ signs */ while((token = strtok(first,"@"))) @@ -197,27 +186,19 @@ double HTTP_ExpressionEvaluate(char *buffer, @@*/ static pToken *Tokenise(const char *expression) { - pToken *start; - pToken *current; - pToken *new; - - const char *tokenstart; - const char *tokenend; - const char *position; - - start = NULL; - current = NULL; + pToken *start = NULL; + pToken *current = NULL; + pToken *new = NULL; - tokenstart = expression; + const char *tokenstart = expression; while(*tokenstart) { /* Remove leading whitespace */ for(; *tokenstart == ' ' || *tokenstart == '\t'; tokenstart++); - tokenend = NULL; - - position = tokenstart; + const char *tokenend = NULL; + const char *position = tokenstart; for(position=tokenstart; *position && *(position+1); position++) { @@ -343,19 +324,11 @@ static pToken *Tokenise(const char *expression) static char *RPParse(pToken **current, char *stack, int *stacklength) { - char *retval; - pToken *this; - char *operator; + char *retval = stack; + pToken *this = *current; + char *operator = NULL; + int numops = 0; char *opstack[MAX_OPS]; - int numops; - int precedence; - - numops = 0; - this = *current; - - retval = stack; - - operator = NULL; for(this = *current; this && strcmp(this->token,")"); this = this->next) { @@ -379,7 +352,7 @@ static char *RPParse(pToken **current, char *stack, int *stacklength) if(operator) { /* We already have an operator */ - precedence = cmpprecendence(operator, this->token); + int precedence = cmpprecendence(operator, this->token); if(precedence > 0) { @@ -446,7 +419,7 @@ static char *RPParse(pToken **current, char *stack, int *stacklength) @@*/ static double Evaluate(double val1, const char *operator, double val2) { - double retval; + double retval = 0.0; if(!strcmp(operator, "+")) { @@ -495,7 +468,6 @@ static double Evaluate(double val1, const char *operator, double val2) else { fprintf(stderr, "Unknown operation %s", operator); - retval = 0; } return retval; @@ -517,14 +489,14 @@ static double Evaluate(double val1, const char *operator, double val2) @@*/ void FreeTokens(pToken *list) { - pToken *token; - pToken *next; + pToken *token = list; - for(token = list; token; token = next) + while( token ) { - next = token->next; + pToken *next = token->next; free(token->token); free(token); + token = next; } } @@ -545,7 +517,7 @@ void FreeTokens(pToken *list) @@*/ static int isoperator(const char *token) { - int retval; + int retval = 0; if(!strcmp(token, "+") || !strcmp(token, "-") || @@ -561,10 +533,6 @@ static int isoperator(const char *token) { retval = 1; } - else - { - retval = 0; - } return retval; } @@ -585,7 +553,6 @@ static int isoperator(const char *token) @@*/ static int cmpprecendence(const char *op1, const char *op2) { - int retval; const char *op; int op1prec; int op2prec; @@ -628,9 +595,8 @@ static int cmpprecendence(const char *op1, const char *op2) } /* Now see which has the higher precedence */ - retval = op2prec-op1prec; - return retval; + return op2prec-op1prec; } /*@@ @@ -649,11 +615,7 @@ static int cmpprecendence(const char *op1, const char *op2) @@*/ static pToken *newtoken(const char *tokenstart, const char *tokenend) { - pToken *this; - const char *position; - char *newpos; - - this = (pToken *)malloc(sizeof(pToken *)); + pToken *this = (pToken *)malloc(sizeof(pToken *)); if(this) { @@ -663,6 +625,8 @@ static pToken *newtoken(const char *tokenstart, const char *tokenend) this->token = (char *)malloc(tokenend-tokenstart+2); if(this->token) { + const char *position; + char *newpos; for(position=tokenstart, newpos=this->token; position <= tokenend; position++, newpos++) @@ -813,9 +777,7 @@ static void printstack(char *stack) double evaluator(const char *token, void *data) { - double retval; - - retval = strtod(token, NULL); + double retval = strtod(token, NULL); /* fprintf(stderr, "Evaluated '%s' to %f\n", token,retval); */ |