예제 #1
0
/*!
 *	\brief Funcao que executa a Shell.
 */
void shooSH_run (void) {
	Job* job;
	Parser p;
	Executor executor;
	bool exited = false;
	
	while (!exited) {
		std::cout << "shooSH> ";
		job = p.parseLine ();
		history.push_back (job->getCommand());
		if (job->hasFailed ()) {
			std::cout << "Erro de sintaxe" << std::endl;
		} else {
			if (!(job->isNop()||job->hasExited())) {
				if (!job->hasPipe()) {
					if (executeBuiltin (job->getProcess(0)) == -1) {
						job->setID (++currID);
						jobList.push_back (job);
						executor.execute (job);
					}
				} else {
					job->setID (++currID);
					jobList.push_back (job);
					executor.execute (job);
				}
			} else {
				exited = job->hasExited();
			}
		}
		job = NULL;
	}
	shooSH_clean();
}
__AGENCY_ANNOTATION
void multi_agent_execute_with_shared_inits_returning_void(use_multi_agent_execute_with_shared_inits_returning_void_member_function,
                                                          Executor& ex, Function f, typename executor_traits<Executor>::shape_type shape,
                                                          Factories... shared_factories)
{
  return ex.execute(f, shape, shared_factories...);
} // end multi_agent_execute_with_shared_inits_returning_void()
예제 #3
0
파일: main.cpp 프로젝트: nanke-/judge
int main(void)
{
    try
    {
        log_open("run.log");
        FM_LOG_DEBUG("opened");
        com.init();
        cout << "after init!!" << endl;
        com.compile();
        cout << com.getResult() << endl;
        if(string("Compile Error") == com.getResult())
        {
            return 0;
        }
        cout << "after compile" << endl;

        Exec.execute();
        cout << "after execute" << endl;

        int result = checker.checkDiff();
        if(result == 0)
        {
            cout << "AC" << endl;
        }
        else if(result == 1)
        {
            cout << "PE" << endl;
        }
        else if(result == 2)
        {
            cout << "WA" << endl;
        }
    }
    // catch(exception &ex)
    // {
    // 	cout << ex.what() << endl;
    // }
    catch(JudgeException &ex)
    {
        cout << ex.what() << endl;
    }
    return 0;
}
예제 #4
0
void CG_GGVar::_init()
{
	CG_GGVar& gi(*this);

	gi.reserve(4*1024);

	gi.add(new CallableWrapT<String>("1.0 beta"), "sys.VERSION");

	gi.add_inner<CallableFunctionCaptureLocal>();
	gi.add_inner<CallableFunctionSame>();

	gi.add_inner<CallableTableProxyGlobal>();
	gi.add_inner<CallableCommandNoop>();
	gi.add_inner<CallableFunctionImport>();
	gi.add_inner<CallableFunctionClone>();
	gi.add_inner<CallableFunctionTypeId>();

	gi.add_inner<CallableFunctionIsNil>();
	gi.add_inner<CallableFunctionIsTable>();
	gi.add_inner<CallableFunctionIsString>();
	gi.add_inner<CallableFunctionIsArray>();
	gi.add_inner<CallableFunctionIsNumber>();
	gi.add_inner<CallableFunctionIsBoolean>();


	gi.add_inner<CallableCommandClear>();
	gi.add_inner<CallableCommandClc>();
	gi.add_inner<CallableCommandExec>();
	gi.add_inner<CallableCommandEval>();
	gi.add_inner<CallableCommandLoadEwsl>();

	gi.add_inner<CallableFunctionAssert>();
	gi.add_inner<CallableFunctionHelp>();
	gi.add_inner<CallableFunctionTranslate>();
	gi.add_inner<CallableFunctionTranslateKT>();
	gi.add_inner<CallableFunctionTranslateHT>();
	gi.add_inner<CallableFunctionTranslateZT>();

	init_module_number();
	init_module_string();
	init_module_table();
	init_module_array();

	init_module_io();
	init_module_os();
	init_module_math();
	init_module_logger();
	init_module_coroutine();
	init_module_regex();

	gi.add(NULL,"pcall");
	gi.add(NULL,"map");
	gi.add(NULL,"map_k");
	gi.add(NULL,"reduce");
	gi.add(NULL,"reduce_k");
	gi.add(NULL,"select");
	gi.add(NULL,"join");
	gi.add(NULL,"array_concat");
	gi.add(NULL, "#internal_end");

	_bInited=true;

	for (size_t i = 0; i < gi.size(); i++)
	{
		if (gi.get(i).first == "#internal_end") break;
		gi.sm_vmap[gi.get(i).first] = new CG_Variable(VAR_SYSTEM, gi.get(i).first);
	}

	size_t n = gi.size();
	for (size_t i = 0; i < n; i++)
	{
		CallableTableEx* p = dynamic_cast<CallableTableEx*>(gi.get(i).second.kptr());
		if (!p) continue;
		String lib = gi.get(i).first;
		for (VariantTable::const_iterator it=p->value.begin();it!=p->value.end();++it)
		{
			gi[lib + "." + (*it).first] = (*it).second;
		}	
	}

	Executor ewsl;
	ewsl.execute(
"\n"
"function pcall(fn,...)\n"
"{\n"
"	try \n"
"		return true,fn(...);\n"
"	catch(...) \n"
"		return false,...;\n"
"};\n"
"\n"
"function map(x,f)\n"
"{\n"
"	local r=[];\n"
"	for_each(v in x)\n"
"	{\n"
"		r.push(f(v));\n"
"	}\n"
"	return r;\n"
"};\n"
"function map_k(x,f)\n"
"{\n"
"	local r=[];\n"
"	local k=0;\n"
"	for_each(v in x)\n"
"	{\n"
"		r.push(f(v,k++));\n"
"	}\n"
"	return r;\n"
"};\n"
"\n"
"function select(x,f)\n"
"{\n"
"	local r=[];\n"
"	for_each(v in x)\n"
"	{\n"
"		if(f(v)) r.push(v);\n"
"	}\n"
"	return r;\n"
"};\n"
"\n"
"function join(s,r)\n"
"{\n"
"	local z=r;\n"
"	return reduce_k(s,def(x,y,k)\n"
"	{\n"
"		return k==0?y#x..z..y;\n"
"	});\n"
"};\n"
"function reduce(x,f,n)\n"
"{\n"
"	for_each(v in x)\n"
"	{\n"
"		n=f(n,v);	\n"
"	}\n"
"	return n;\n"
"};\n"
"function reduce_k(x,f,n)\n"
"{\n"
"	local k=0;\n"
"	for_each(v in x)\n"
"	{\n"
"		n=f(n,v,k++);	\n"
"	}\n"
"	return n;\n"
"};\n"
"def array_concat(...)\n"
"{\n"
"	local fn=[];\n"
"	for_each(v in [...])\n"
"	{\n"
"		local n=length(v);\n"
"		if(n>0) fn[end+1:end+n]=v[:];\n"
"	}\n"
"	return fn;\n"
"};\n"
"\n"
"def metatable_call2(v1,v2,fn)\n"
"{\n"
"	local m1=getmetatable(v1);\n"
"	if(m1!=nil)\n"
"	{\n"
"		local k1=m1[fn];\n"
"		if(k1!=nil)\n"
"		{\n"
"			...=k1(v1,v2);\n"
"			if([...].length()==1) return ...;\n"
"		}\n"
"	}\n"
"	local m2=getmetatable(v2);\n"
"	if(m2!=nil)\n"
"	{\n"
"		local k2=m2[fn];\n"
"		if(k2!=nil)\n"
"		{\n"
"			...=k2(v1,v2);\n"
"			if([...].length()==1) return ...;\n"
"		}\n"
"	}\n"
"	throw 'bad argument to '..fn,v1,v2;\n"
"};\n"
"\n"
"def metatable_call1(v1,fn)\n"
"{\n"
"	local m1=getmetatable(v1);\n"
"	if(m1!=nil)\n"
"	{\n"
"		local k1=m1[fn];\n"
"		if(k1!=nil)\n"
"		{\n"
"			...=k1(v1);\n"
"			if([...].length()==1) return ...;\n"
"		}\n"
"	}\n"
"	throw 'bad argument to '..fn,v1;\n"
"};\n"
		
		
		
		);
	for(size_t i=0;i<ewsl.tb1.size();i++)
	{
		gi[ewsl.tb1.get(i).first]=ewsl.tb1.get(i).second;
	}

}