Exemple #1
0
Fichier : ucl.c Projet : M-ike/work
static void Compile(char *file)
{
	AstTranslationUnit transUnit;

	Initialize();

	// parse preprocessed C file, generate an abstract syntax tree
	transUnit = ParseTranslationUnit(file);

	// perform semantic check on abstract synatx tree
	CheckTranslationUnit(transUnit);

	if (ErrorCount != 0)
		goto exit;

	if (DumpAST)
	{
		DumpTranslationUnit(transUnit);
	}

	// translate the abstract synatx tree into intermediate code
	Translate(transUnit);

	if (DumpIR)
	{
		DAssemTranslationUnit(transUnit);
	}

	// emit assembly code from intermediate code
	EmitTranslationUnit(transUnit);

exit:
	Finalize();
}
Exemple #2
0
/* 编译 */
static void Compile (char *file) 
{
    AstTranslationUnit transUnit;

    Initialize ();

    if ( test_lex ) {

        LexTest (file);
        goto exit;
    }

    /* 处理C文件,产生语法树所需的节点 */
    transUnit = ParseTranslationUnit (file);

    /* 检查节点的语义 */
    CheckTranslationUnit (transUnit);

    if ( ErrorCount ) 
        goto exit;

    if ( DumpAST ) {
        /* 生成语法树 */
        DumpTranslationUnit (transUnit);
    }

    /* 语句翻译 */
    ast_translate (transUnit);

#if 0
    if (DumpIR) {
        
        /* 中间代码输出 */
        DAssemTranslationUnit (transUnit);
    }

    /* 目标代码生成 */
    //EmitTranslationUnit (transUnit);

#endif

exit:
    Finalize ();
}