示例#1
0
文件: 7a.c 项目: 7shi/Betelgeuse
void assemble_op(enum Op op)
{
    int op1 = ((int)op) >> 16;
    switch (formats[op1])
    {
    case Bra: parse_bra(op); break;
    case Mem: parse_mem(op); break;
    case Mfc: parse_mfc(op); break;
    case Mbr: parse_mbr(op); break;
    case Opr: parse_opr(op); break;
    case F_P: parse_fp (op); break;
    default:
        {
            uint64_t num;
            if (parse_value(&num)) assemble_pcd(op1, (int)num);
            break;
        }
    }
}
示例#2
0
void BidlParser::do_parse(const std::string& bidl) {
    std::string dir;
    if (!g_parser.is_bidl_exist_in_bidl_include_dirs(bidl, dir)) {
        myerror("file %s is not exist", bidl.c_str());
    }
    std::string fullname = dir + bidl;
    if (is_bidl_parsed(bidl)) {
        return;
    }

    _input_bidls.push_back(bidl);
    g_cur_bidl_file_name = bidl;

    FILE* fp = fopen(fullname.c_str(), "r");
    if (!fp) {
        myerror("open %s failed: %s", fullname.c_str(), strerror(errno));
    }

    ParseResult* pr;
    pr = parse_fp(fp);
    fclose(fp);

    if (!pr || !pr->bt) {
        myerror("parse %s failed", fullname.c_str());
    }
    _filename2parseresult.insert(std::make_pair(bidl, pr));

    std::vector<std::string>::const_iterator citr;
    for (citr = pr->include_bidls.begin();
            citr != pr->include_bidls.end();
            ++citr) {
        do_parse(*citr);
    }

    g_parseresult = NULL;
}