00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027 #include <string.h>
00028
00029
00030
00031
00032 #define TRUE 1
00033 #define FALSE 0
00034 extern char* ptoc_string(int);
00035
00036 extern FILE* yyin;
00037 extern FILE* yyout;
00038
00039 extern int yyparse();
00040 extern int line_no, char_no;
00041 extern int num_errs;
00042
00043 char* fn_source;
00044 char* fn_target;
00045 char* fn_error;
00046
00047 FILE* error_file;
00048
00049 int parse()
00050 {
00051 fn_source = (char*)ptoc_string(1);
00052 fn_target = (char*)ptoc_string(2);
00053 fn_error = (char*)ptoc_string(3);
00054
00055 if (strcmp(fn_error, "stderr") == 0)
00056 error_file = stderr;
00057 else
00058 error_file = fopen(fn_error, "w");
00059
00060 if ((yyin = fopen(fn_source, "r")) == NULL) {
00061 fprintf(error_file,
00062 "Can not open source file %s.\n",
00063 fn_source);
00064 return FALSE;
00065 }
00066
00067 if ((yyout = fopen(fn_target, "w")) == NULL) {
00068 fprintf(error_file,
00069 "Can not open target file %s.\n",
00070 fn_target);
00071 return FALSE;
00072 }
00073
00074 line_no = 1; char_no = 1;
00075 num_errs = 0;
00076
00077 yyparse();
00078
00079 fclose(yyin);
00080 fclose(yyout);
00081
00082 if (num_errs > 0) {
00083 fprintf(error_file,
00084 "%s contains syntax %d errors.\n",
00085 fn_source, num_errs);
00086 }
00087
00088 if (error_file != stderr)
00089 fclose(error_file);
00090 return (num_errs == 0) ? TRUE : FALSE ;
00091 }