Parsifal Software - Home | AnaGram trial copy | Example download
/* EVALDEMO.C Version 1.1 Program to demonstrate evaluateExpression Copyright (c) 1996 - 1999 Parsifal Software. All Rights Reserved. Usage: evaldemo <filename>\n where the file holds expressions to be evaluated, with optional comments. An example main program which simply reads a file into a string in memory and calls evaluateExpression to evaluate the expressions in the string and store the results in a simple symbol table. It then prints out the contents of the symbol table to stdout in a form which allows it to be read as input again, should that be desired for initialization purposes. Finally, if there was an error, it prints a diagnostic message on stderr. For further information about this program, contact Parsifal Software http://www.parsifalsoft.com info@parsifalsoft.com 1-800-879-2755, Voice/Fax 1-508-358-2564 P.O. Box 219 Wayland, MA 01778 */ #include <stdio.h> #include <string.h> #include <malloc.h> #include "evaldefs.h" /* Main Program */ int main(int argc, char *argv[]) { int i; FILE *input; long fileLength; size_t stringLength; int errorFlag; char *expressionString; /* Check for enough arguments */ if (argc != 2) { printf("Usage: evaldemo <filename>\n"); return 1; } /* Open input file */ input = fopen(argv[1],"r"); if (input == NULL) { printf("Cannot open %s\n", argv[1]); return 2; } /* find out how big the file is */ if (fseek(input, SEEK_SET, SEEK_END)) { printf("Strange problems with %s\n", argv[1]); return 3; } fileLength = ftell(input); if (fileLength < 0 ) { // -1L is error return printf("Error getting file length (%d) of %s\n", fileLength, argv[1]); return 4; } /* fseek to beginning of file */ if (fseek(input, 0, SEEK_SET)) { printf("Strange problems with %s\n", argv[1]); return 5; } /* Allocate storage for input string */ expressionString = (char*)malloc(fileLength + 1); if (expressionString == NULL) { printf("Insufficient memory\n"); return 6; } /* read file */ stringLength = fread(expressionString, 1, (unsigned)fileLength, input); if (stringLength == 0) { printf("Unable to read %s\n", argv[1]); free(expressionString); fclose(input); return 7; } expressionString[stringLength] = 0; // Terminate string with null /* evaluate expressions */ errorFlag = evaluateExpression(expressionString); // Call parser function free(expressionString); fclose(input); /* print values of variables */ for (i = 0; i < nVariables; i++) printf("%s = %g;\n", variable[i].name, variable[i].value); /* check for error */ if (errorFlag) fprintf(stderr,"File %s: %s at line %d, column %d\n", argv[1], errorRecord.message, errorRecord.line, errorRecord.column); /* done */ return 0; } /* End of EVALDEMO.C */
Comments or questions? support@parsifalsoft.com