Esempio n. 1
0
int main(int argc, char* argv[])
{
	int  i = 1; FILE* fp;
	int temp = 0;
	string filename;
	initSymbolTable(labelTABLE);
	initSymbolTable(entryTABLE);
	initSymbolTable(externTABLE);
	QUE_initiate();
	for(;argv[i] != NULL; i++){
		temp = strlen(argv[i]);
		filename = argv[i];

		if((fp = fopen(strcat(filename, asEndOfFile), "r")) == NULL )
			fprintf(stderr, "\nError opening file %s ", argv[i]);
		else{
			filename[temp] = '\0';
			firstStep(fp);
			secondStep();
			printMemory(strcat(filename,obEndOfFile));
			filename[temp] = '\0';
			printGuideLines(strcat(filename,obEndOfFile));
			filename[temp] = '\0';
			printEntryTable(entryTABLE, strcat(filename,entEndOfFile));
			filename[temp] = '\0';
			printExternTable(strcat(filename,extEndOfFile));
		}
		freeSymbolTable(labelTABLE);
		freeSymbolTable(entryTABLE);
		freeSymbolTable(externTABLE);
		freeQueue();
	}
	return 1;
}
/* Add a empty child symbol table to the linked list of symbol tables. This
is done when entering a new scope level */
SymbolTable *scopeSymbolTable(SymbolTable *parent)
{
	SymbolTable *t;
	t = initSymbolTable();
	t->parent = parent;
	return t;
}
Esempio n. 3
0
int main(int argc, char **argv) {
  int c;
  bool debug_mode = false;
  bool verbose_mode = false;
  while ((c = getopt(argc, argv, "dv")) != -1) {
    switch (c) {
      case 'd':
        debug_mode = true;
        break;
      case 'v':
        verbose_mode = true;
        break;
      default: /* '?' */
        fprintf(stderr, "Anvendelse: %s [-d] [-v]\n", argv[0]);
        exit(1);
    }
  }
  lineno = 1;
  if (verbose_mode) {
    fprintf(stderr, "Leksikalsk og syntaktisk analyse udføres ...\n");
  }
  int parse = yyparse();
  if (parse != 0) {
    fprintf(stderr, "Der opstod en fejl under den leksikalske eller syntaktiske analyse.\n");
    return 1;
  }
  if (verbose_mode) {
    fprintf(stderr, "Leksikalsk og syntaktisk analyse blev udført.\n");
  }
  if (debug_mode) {
    fprintf(stderr, "Pæn udskrift efter leksikalsk og syntaktisk analyse:\n");
    prettyMAIN(theprogram);
  }
  if (verbose_mode) {
    fprintf(stderr, "Semantisk analyse udføres ...\n");
  }
  SymbolTable *mscope = initSymbolTable();
  int traversalerr = traversal(theprogram, mscope);
  if (traversalerr != 0) {
    fprintf(stderr, "Der opstod i alt %d fejl under den semantiske analyse.\n", traversalerr);
    return 1;
  }
  if (verbose_mode) {
    fprintf(stderr, "Semantisk analyse blev udført.\n");
  }
  if (debug_mode) {
    dumpsymbol(theprogram, mscope);
  }
  if (verbose_mode) {
    fprintf(stderr, "Kodegenerering udføres ...\n");
  }
  LINKED_LIST *l = generateCode(theprogram, mscope);
  l = registerAllocation(l);
  if (verbose_mode) {
    fprintf(stderr, "Kodegenerering blev udført.\n");
  }
  emission(l);
  return 0;
}
Esempio n. 4
0
int runParser(LexemeList *LLin){
    LL = LLin;
    ptrLL = 0;
    g_level = 0;
    g_addr = 0;
    if(initSymbolTable() != 0) return 1;
    getNextToken();
    
    if(program() != 0) return 1;
    
    return 0;
}
Esempio n. 5
0
void doConversion(void **name) {
    char *newName = *name;
    initErrorFile(newName);
    initExpandToken();
    initSymbolTable();
    newName = initTokenizer(newName);
    initPrinting(newName);

    cparseInterface();

    zapPrinting();
    zapTokenizer();
    zapSymbolTable();
    zapExpandToken();
    zapStringTable();
    zapErrorFile();
}
Esempio n. 6
0
int runParser(LexemeList *LLin){
    LL = LLin;
    ptrLL = 0;
    g_level = 0;
    g_addr = 0;
    if(initSymbolTable() != 0) return 1;
    getNextToken();

    if(program() != 0) return 1;

    int i;
    //printf("CX = %d\n",cx);
	for(i = 0; i < cx; i++) {
		printf("%d %d %d\n",code[i].op,code[i].l,code[i].m);
	}

    return 0;
}
Esempio n. 7
0
//-------------------------------------------------------------
// ARBProgram::getParameter()    set symbol 
//-------------------------------------------------------------      
int ARBProgram::getParameter(char *s){
    int i=0;
    if(!symbols)
        initSymbolTable();
    if(!symbols)
        return -1;
    for(i=0;i<sid;i++){
        if(strcmp(s,symbols[i])==0)
            return i;
    }
    MALLOC(strlen(s),char,symbols[sid]);
    if(symbols[sid]){
        strcpy(symbols[sid],s);
        sid++;
        return sid;
    }
    return -1;
}
Esempio n. 8
0
void codeGen(Node *root, FILE *ucoFile)
{
    Node *p;            // pointer for Node
    int globalSize;        // the size of global variables

    file = ucoFile; //

    rootTable = initSymbolTable();

    // step 1: process the declaration part
    for (p = root->son; p; p = p->next) {
        if (p->token.tokenNumber == DCL) {
            processDeclaration(rootTable, p->son);
        } else if (p->token.tokenNumber == FUNC_DEF) {
            processFuncHeader(rootTable, p->son);
        } else {
            icg_error(3);
        }
    }

    globalSize = rootTable->offset - 1;

    // step 2: process the function part
    for (p = root->son; p; p = p->next) {
        if (p->token.tokenNumber == FUNC_DEF) {
            processFunction(rootTable, p);
        }
    }

    display(rootTable, 0);

    // step 3: generate codes for starting routine
    //                bgn        globalSize
    //                ldp
    //                call    main
    //                end
    emit1("bgn", globalSize);
    emit0("ldp");
    emitJump("call", "main");
    emit0("end");
}
Esempio n. 9
0
int main(int argc, char **argv){
	int lArg=0, aArg=0, vArg=0;
	if ((argc-1) == 0)
		return 0;
	//check for 
	//-l : print the list of lexemes/tokens (scanner output) to the screen
	//-a : print the generated assembly code (parser/codegen output) to the screen
	//-v : print virtual machine execution trace (virtual machine output) to the screen
	//filename (no code)
	int i=0;
	for(i=0; i<argc-1; i++){
		if(inputDBG) printf("%s\n",argv[i]);
		if(strcmp(argv[i], "-l") == 0){
			lArg = 1;
			continue;
		}
		if(strcmp(argv[i], "-a") == 0){
			aArg = 1;
			continue;
		}
		if(strcmp(argv[i], "-v") == 0){
			vArg = 1;
			continue;
		}
	}
	//lArg = 0; aArg = 1; vArg = 1; // ****param override remove later****
	if(inputDBG) printf("%d %d %d\n",lArg, aArg, vArg);
	
	initSymbolTable();
	
	char* filename = malloc(sizeof(char)*20);
	strcpy(filename,argv[argc-1]);
	if(inputDBG) printf("%s\n",filename);
	lexNode* list = lexAnInit(filename, lArg);
	parseLexemeList(list, aArg);
	VMinit(assemblyCode,vArg);
	return 0;
}
void sym1PassSCRIPTCOLLECTION(SCRIPTCOLLECTION *s)
{
	TExternalSymbol* symbol;

	s->sym = initSymbolTable();

	// add external symbols
	symbol = ExternalVars;
	while(symbol!=NULL){
		putSymbol2(s->sym, symbol->name, symbol->kind);
		symbol = (TExternalSymbol*)symbol->next;
	}

	symbol = ExternalFuncs;
	while(symbol!=NULL){
		putSymbol2(s->sym, symbol->name, symbol->kind);
		symbol = (TExternalSymbol*)symbol->next;
	}


	if (s->toplevels != NULL)
		sym1PassTOPLEVEL(s->toplevels, s->sym);
}
Esempio n. 11
0
VOIDPTRFUNC
CP_jREPL2(){
	
	//fprintf(stdout, "\nStack in CP_jREPL2:\n");
	//printJStack(__FILE__,__LINE__,__FUNCTION__);
	DEBUGCODE(PRINT_STACK->state, printJStack(__FILE__,__LINE__,__FUNCTION__));

	OBJ result = RETVAL;

#ifdef DEBUG
	if( (SP <= 5) || PRINT_INCLUDE->state){
		printIndent(indentLevelForInclude);
#else
	if( (SP <= 5)) {
#endif
		js_print(stdout, result, 1);		// P rint
		printf("\n");
	}
							// L oop
	OBJ inputStream = ARG(0);
	TAILCALL1((VOIDPTRFUNC)CP_jREPL, inputStream);	
}

int
main() {
	initSymbolTable();
	initializeWellKnownObjects();
	initJStack();
#ifdef DEBUG
	initDebugOptions();	
	initGlobalEnvironment();
	setupInitialEnvironment();
	setupBuiltinSyntax();
	selftest();
#endif
	
	printf("hello friend...\n");
	initGlobalEnvironment();
	setupInitialEnvironment();
	printf("Welcome to (JS)cheme\n");

	if( setjmp(whereEverythingWasFine) ){
#ifdef DEBUG
		indentLevel = 0;
		indentLevelForInclude = 0;
#endif
		// reset Stack index
		SP = 0;
		AP = 0;
		BP = 0;
		prompt_on();
		printf("back in wonderland\n");
	}	
	printf("...starting a REPL for you.\n");
	OBJ inputStream = newFileStream(stdin);
	
#ifdef DEBUG
	if(CONTINUATION_PASSING->state){
		CP_setupBuiltinSyntax();
		enterTrampoline1(inputStream);
	}else{
		setupBuiltinSyntax();
		jREPL(inputStream);
	}
#else 
	//jREPL(inputStream);
	CP_setupBuiltinSyntax();
	enterTrampoline1(inputStream);
#endif

	return 0;
}
Esempio n. 12
0
void semanticCheck(){
    semanticErrorCount = 0;
    inStruct = false;
    initSymbolTable();
    program__extdeflist(root);
}