int main(int argc, char *argv[])
{
    if(argc<2)
    {
        printf("Please select an input file\n");
        exit(0);
    }
    FILE *fp=fopen(argv[1],"r");
    if(!fp)
    {
        printf("couldn't open file for reading\n");
        exit(0);
    }

    char funcName[100];
    StmtRepresentation* result = NULL;

    yyin=fp;

    typeTable = CreateTypeNameTable();
    program = CreateProgramNode();
    yyparse();
    DebugProgramNode(program);

    printf("Enter a function name to be traced: ");
    scanf("%s", funcName);
    opTrace = NULL;
    symTable = CreateSymTable();
    g_operation_id = 0;
    lastIssueOP = NULL;

    result = TraceFuncNode(program, funcName, NULL);
    DeleteStmtRepresentation(result);
    ShowOPTrace(opTrace);
    CalculateCriticalPath(opTrace);

    /* Delete Symbol Table */
    DeleteSymbolTable(symTable);
    DeleteOPTrace(opTrace);
    DeleteTypeNameTable(typeTable);
    DeleteProgramNode(program);
    fclose(fp);
}
Beispiel #2
0
VOID Error (STRPTR Msg, BOOL PrintLine)
{
    struct  FileDetails *f;

    if (PrintLine)
    {
        fprintf (stderr, "%s", Line);
        fprintf (stderr, "Error: Line %d ", LineNo);
    }

    fprintf (stderr, "%s\n", Msg);

    if (ErrorSym)
    {
        printf ("\nSymbol table\n");
        DisplaySymbolTable (FALSE);
    }

    DeleteSymbolTable ();
    fclose (In);

    if (Pass == 2)
        fclose (Op);

    while (Fd)
    {
        f = Fd->Prev;
        free (Fd);
        Fd = f;
    }

    if (DoList)
        fclose (Lst);

    exit (20);
}