Ejemplo n.º 1
0
int main (int argc, char** argv) {
    //Parse Arguments
    g_args = parse_args(argc, argv);

    printf("Parsing Netlist...\n");
    parse_netlist(g_args->netlist_file);
    printf("DONE\n");

    char buf[50] = "kplace graphics";
    init_graphics(buf);
    //start_interactive_graphics();

    if(g_args->clique) {
        //Quesiton 1.
        solve_clique();
    }

    if(g_args->bound2bound) {
        //Question 2.
        solve_clique();
        solve_bound2bound(1.);
    }

    //Quesiton 3.
    if(g_args->simpl) {
        solve_simpl();
    }

    start_interactive_graphics();
    printf("\nTool Finished - exiting...\n");
    return 0;
}
Ejemplo n.º 2
0
bool parser_t::parse(const char *buf, const pstring nlname)
{
	ppreprocessor prepro;

	pstring processed = prepro.process(buf);
	m_buf = processed.cstr();

	reset(m_buf);
	set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-");
	set_number_chars(".0123456789", "0123456789eE-."); //FIXME: processing of numbers
	char ws[5];
	ws[0] = ' ';
	ws[1] = 9;
	ws[2] = 10;
	ws[3] = 13;
	ws[4] = 0;
	set_whitespace(ws);
	set_comment("/*", "*/", "//");
	m_tok_param_left = register_token("(");
	m_tok_param_right = register_token(")");
	m_tok_comma = register_token(",");

	m_tok_ALIAS = register_token("ALIAS");
	m_tok_DIPPINS = register_token("DIPPINS");
	m_tok_NET_C = register_token("NET_C");
	m_tok_FRONTIER = register_token("OPTIMIZE_FRONTIER");
	m_tok_PARAM = register_token("PARAM");
	m_tok_NET_MODEL = register_token("NET_MODEL");
	m_tok_INCLUDE = register_token("INCLUDE");
	m_tok_LOCAL_SOURCE = register_token("LOCAL_SOURCE");
	m_tok_LOCAL_LIB_ENTRY = register_token("LOCAL_LIB_ENTRY");
	m_tok_SUBMODEL = register_token("SUBMODEL");
	m_tok_NETLIST_START = register_token("NETLIST_START");
	m_tok_NETLIST_END = register_token("NETLIST_END");
	m_tok_TRUTHTABLE_START = register_token("TRUTHTABLE_START");
	m_tok_TRUTHTABLE_END = register_token("TRUTHTABLE_END");
	m_tok_TT_HEAD = register_token("TT_HEAD");
	m_tok_TT_LINE = register_token("TT_LINE");
	m_tok_TT_FAMILY = register_token("TT_FAMILY");

	bool in_nl = false;

	while (true)
	{
		token_t token = get_token();

		if (token.is_type(ENDOFFILE))
		{
			return false;
			//error("EOF while searching for <%s>", nlname.cstr());
		}

		if (token.is(m_tok_NETLIST_END))
		{
			require_token(m_tok_param_left);
			if (!in_nl)
				error("Unexpected NETLIST_END");
			else
			{
				in_nl = false;
			}
			require_token(m_tok_param_right);
		}
		else if (token.is(m_tok_NETLIST_START))
		{
			if (in_nl)
				error("Unexpected NETLIST_START");
			require_token(m_tok_param_left);
			token_t name = get_token();
			require_token(m_tok_param_right);
			if (name.str() == nlname || nlname == "")
			{
				parse_netlist(name.str());
				return true;
			} else
				in_nl = true;
		}
	}
}
Ejemplo n.º 3
0
bool netlist_parser::parse(const char *buf, const pstring nlname)
{
    m_buf = buf;

    reset(buf);
    set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-");
    set_number_chars("01234567890eE-."); //FIXME: processing of numbers
    char ws[5];
    ws[0] = ' ';
    ws[1] = 9;
    ws[2] = 10;
    ws[3] = 13;
    ws[4] = 0;
    set_whitespace(ws);
    set_comment("/*", "*/", "//");
    m_tok_param_left = register_token("(");
    m_tok_param_right = register_token(")");
    m_tok_comma = register_token(",");

    m_tok_ALIAS = register_token("ALIAS");
    m_tok_NET_C = register_token("NET_C");
    m_tok_PARAM = register_token("PARAM");
    m_tok_NET_MODEL = register_token("NET_MODEL");
    m_tok_INCLUDE = register_token("INCLUDE");
    m_tok_SUBMODEL = register_token("SUBMODEL");
    m_tok_NETLIST_START = register_token("NETLIST_START");
    m_tok_NETLIST_END = register_token("NETLIST_END");

    bool in_nl = false;

    while (true)
    {
        token_t token = get_token();

        if (token.is_type(ENDOFFILE))
        {
            return false;
            //error("EOF while searching for <%s>", nlname.cstr());
        }

        if (token.is(m_tok_NETLIST_END))
        {
            require_token(m_tok_param_left);
            if (!in_nl)
                error("Unexpected NETLIST_END");
            else
            {
                in_nl = false;
            }
            require_token(m_tok_param_right);
        }
        else if (token.is(m_tok_NETLIST_START))
        {
            if (in_nl)
                error("Unexpected NETLIST_START");
            require_token(m_tok_param_left);
            token_t name = get_token();
            require_token(m_tok_param_right);
            if (name.str() == nlname || nlname == "")
            {
                parse_netlist(name.str());
                return true;
            } else
                in_nl = true;
        }
    }
}
Ejemplo n.º 4
0
bool parser_t::parse(const pstring &nlname)
{
	this->identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-")
		.number_chars(".0123456789", "0123456789eE-.") //FIXME: processing of numbers
		//set_whitespace(pstring("").cat(' ').cat(9).cat(10).cat(13));
		.whitespace(pstring("") + ' ' + static_cast<char>(9) + static_cast<char>(10) + static_cast<char>(13))
		.comment("/*", "*/", "//");
	m_tok_param_left = register_token("(");
	m_tok_param_right = register_token(")");
	m_tok_comma = register_token(",");

	m_tok_ALIAS = register_token("ALIAS");
	m_tok_DIPPINS = register_token("DIPPINS");
	m_tok_NET_C = register_token("NET_C");
	m_tok_FRONTIER = register_token("OPTIMIZE_FRONTIER");
	m_tok_PARAM = register_token("PARAM");
	m_tok_HINT = register_token("HINT");
	m_tok_NET_MODEL = register_token("NET_MODEL");
	m_tok_INCLUDE = register_token("INCLUDE");
	m_tok_LOCAL_SOURCE = register_token("LOCAL_SOURCE");
	m_tok_LOCAL_LIB_ENTRY = register_token("LOCAL_LIB_ENTRY");
	m_tok_SUBMODEL = register_token("SUBMODEL");
	m_tok_NETLIST_START = register_token("NETLIST_START");
	m_tok_NETLIST_END = register_token("NETLIST_END");
	m_tok_TRUTHTABLE_START = register_token("TRUTHTABLE_START");
	m_tok_TRUTHTABLE_END = register_token("TRUTHTABLE_END");
	m_tok_TT_HEAD = register_token("TT_HEAD");
	m_tok_TT_LINE = register_token("TT_LINE");
	m_tok_TT_FAMILY = register_token("TT_FAMILY");

	bool in_nl = false;

	while (true)
	{
		token_t token = get_token();
		if (token.is_type(ENDOFFILE))
		{
			return false;
		}

		if (token.is(m_tok_NETLIST_END))
		{
			require_token(m_tok_param_left);
			if (!in_nl)
				error (MF_0_UNEXPECTED_NETLIST_END);
			else
			{
				in_nl = false;
			}
			require_token(m_tok_param_right);
		}
		else if (token.is(m_tok_NETLIST_START))
		{
			if (in_nl)
				error (MF_0_UNEXPECTED_NETLIST_START);
			require_token(m_tok_param_left);
			token_t name = get_token();
			require_token(m_tok_param_right);
			if (name.str() == nlname || nlname == "")
			{
				parse_netlist(name.str());
				return true;
			} else
				in_nl = true;
		}
	}
}