Example #1
0
void executeCodegen(CodegenOptions options) {
    llvm::SmallString<128> outpath(options.inputFilePath);
    llvm::sys::path::replace_extension(outpath, extension(options.type));

    Parser p(options.inputFilePath);
    AST ast = p.parse();

    filebuf outfile;
    outfile.open(outpath.c_str(), ios::out);
    ostream os(&outfile);

    if (options.type == codegen::AST) {
        pretty_print(ast, os);
        return;
    }

    llvm::raw_os_ostream raw_os(os);

    llvm::InitializeAllTargets();
    llvm::InitializeAllTargetMCs();
    llvm::InitializeAllAsmPrinters();
    Symbols symbols;
    checkSemantics(ast, symbols);
    MjModule module(ast, symbols);
    Codegen cg(module, options);
    cg.emitCode(&raw_os);
    raw_os.flush();

}
Example #2
0
int main(int argc, char *argv[]){
    FILE *input = fopen(argv[1], "r");
    FILE *output;
    if(input == NULL) return -1;
    token_list *tl = lex(input);
    fclose(input);

    if(correctTokenList(tl) != 1)
	return 0;
    if(tl == NULL){
	fprintf(stderr, "scanning error\n");
	fflush(NULL);
	return 0;
    }
    program_node *pn = parse(tl);
    freeTokenList(tl);

    if(pn){
	int tmp;
	output = fopen("result.k15", "w");
	tmp =  checkSemantics(pn, output);
	fclose(output);
	return tmp;
    }

    return 0;
}