mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5377 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			183 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| char rcsid_main[] = "$Id$";
 | |
| 
 | |
| #include <math.h>
 | |
| #include <stdio.h>
 | |
| #include "b.h"
 | |
| #include "fe.h"
 | |
| 
 | |
| int debugTables = 0;
 | |
| static int simpleTables = 0;
 | |
| static int internals = 0;
 | |
| static int diagnostics = 0;
 | |
| 
 | |
| static char *inFileName;
 | |
| static char *outFileName;
 | |
| 
 | |
| static char version[] = "BURG, Version 1.0";
 | |
| 
 | |
| extern int main ARGS((int argc, char **argv));
 | |
| 
 | |
| int
 | |
| main(argc, argv) int argc; char **argv;
 | |
| {
 | |
| 	int i;
 | |
| 	extern int atoi ARGS((char *));
 | |
| 
 | |
| 	for (i = 1; argv[i]; i++) {
 | |
| 		char **needStr = 0;
 | |
| 		int *needInt = 0;
 | |
| 
 | |
| 		if (argv[i][0] == '-') {
 | |
| 			switch (argv[i][1]) {
 | |
| 			case 'V':
 | |
| 				fprintf(stderr, "%s\n", version);
 | |
| 				break;
 | |
| 			case 'p':
 | |
| 				needStr = (char**)&prefix;
 | |
| 				break;
 | |
| 			case 'o':
 | |
| 				needStr = &outFileName;
 | |
| 				break;
 | |
| 			case 'I':
 | |
| 				internals = 1;
 | |
| 				break;
 | |
| 			case 'T':
 | |
| 				simpleTables = 1;
 | |
| 				break;
 | |
| 			case '=':
 | |
| #ifdef NOLEX
 | |
| 				fprintf(stderr, "'%s' was not compiled to support lexicographic ordering\n", argv[0]);
 | |
| #else
 | |
| 				lexical = 1;
 | |
| #endif /* NOLEX */
 | |
| 				break;
 | |
| 			case 'O':
 | |
| 				needInt = &principleCost;
 | |
| 				break;
 | |
| 			case 'c':
 | |
| 				needInt = &prevent_divergence;
 | |
| 				break;
 | |
| 			case 'e':
 | |
| 				needInt = &exceptionTolerance;
 | |
| 				break;
 | |
| 			case 'd':
 | |
| 				diagnostics = 1;
 | |
| 				break;
 | |
| 			case 'S':
 | |
| 				speedflag = 1;
 | |
| 				break;
 | |
| 			case 't':
 | |
| 				trimflag = 1;
 | |
| 				break;
 | |
| 			case 'G':
 | |
| 				grammarflag = 1;
 | |
| 				break;
 | |
| 			default:
 | |
| 				fprintf(stderr, "Bad option (%s)\n", argv[i]);
 | |
| 				exit(1);
 | |
| 			}
 | |
| 		} else {
 | |
| 			if (inFileName) {
 | |
| 				fprintf(stderr, "Unexpected Filename (%s) after (%s)\n", argv[i], inFileName);
 | |
| 				exit(1);
 | |
| 			}
 | |
| 			inFileName = argv[i];
 | |
| 		}
 | |
| 		if (needInt || needStr) {
 | |
| 			char *v;
 | |
| 			char *opt = argv[i];
 | |
| 
 | |
| 			if (argv[i][2]) {
 | |
| 				v = &argv[i][2];
 | |
| 			} else {
 | |
| 				v = argv[++i];
 | |
| 				if (!v) {
 | |
| 					fprintf(stderr, "Expection argument after %s\n", opt);
 | |
| 					exit(1);
 | |
| 				}
 | |
| 			}
 | |
| 			if (needInt) {
 | |
| 				*needInt = atoi(v);
 | |
| 			} else if (needStr) {
 | |
| 				*needStr = v;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if (inFileName) {
 | |
| 		if(freopen(inFileName, "r", stdin)==NULL) {
 | |
| 			fprintf(stderr, "Failed opening (%s)", inFileName);
 | |
| 			exit(1);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if (outFileName) {
 | |
| 		if ((outfile = fopen(outFileName, "w")) == NULL) {
 | |
| 			fprintf(stderr, "Failed opening (%s)", outFileName);
 | |
| 			exit(1);
 | |
| 		}
 | |
| 	} else {
 | |
| 		outfile = stdout;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	yyparse();
 | |
| 
 | |
| 	if (!rules) {
 | |
| 		fprintf(stderr, "ERROR: No rules present\n");
 | |
| 		exit(1);
 | |
| 	}
 | |
| 
 | |
| 	findChainRules();
 | |
| 	findAllPairs();
 | |
| 	doGrammarNts();
 | |
| 	build();
 | |
| 
 | |
| 	debug(debugTables, foreachList((ListFn) dumpOperator_l, operators));
 | |
| 	debug(debugTables, printf("---final set of states ---\n"));
 | |
| 	debug(debugTables, dumpMapping(globalMap));
 | |
| 
 | |
| 
 | |
| 	startBurm();
 | |
| 	makeNts();
 | |
| 	if (simpleTables) {
 | |
| 		makeSimple();
 | |
| 	} else {
 | |
| 		makePlanks();
 | |
| 	}
 | |
| 
 | |
| 	startOptional();
 | |
| 	makeLabel();
 | |
| 	makeKids();
 | |
| 
 | |
| 	if (internals) {
 | |
| 		makeChild();
 | |
| 		makeOpLabel();
 | |
| 		makeStateLabel();
 | |
| 	}
 | |
| 	endOptional();
 | |
| 
 | |
| 	makeOperatorVector();
 | |
| 	makeNonterminals();
 | |
| 	if (internals) {
 | |
| 		makeOperators();
 | |
| 		makeStringArray();
 | |
| 		makeRuleDescArray();
 | |
| 		makeCostArray();
 | |
| 		makeDeltaCostArray();
 | |
| 		makeStateStringArray();
 | |
| 		makeNonterminalArray();
 | |
| 		/*
 | |
| 		makeLHSmap();
 | |
| 		*/
 | |
| 	}
 | |
| 	makeClosureArray();
 | |
| 
 | |
| 	if (diagnostics) {
 | |
| 		reportDiagnostics();
 | |
| 	}
 | |
| 
 | |
| 	yypurge();
 | |
| 	exit(0);
 | |
| }
 |