Пример #1
0
	bool CoreTheory::handleDistinct(const std::vector<types::TermType>& arguments, types::TermType& result, TheoryError& errors) {
		std::vector<FormulaT> args;
		if (!convertArguments(arguments, args, errors)) return false;
		result = expandDistinct(args, [](const FormulaT& a, const FormulaT& b){
			return FormulaT(carl::FormulaType::XOR, {a, b});
		});
		return true;
	}
Пример #2
0
	bool CoreTheory::functionCall(const Identifier& identifier, const std::vector<types::TermType>& arguments, types::TermType& result, TheoryError& errors) {
		std::vector<FormulaT> args;
		if (!convertArguments(arguments, args, errors)) return false;
		
		if (boost::iequals(identifier.symbol, "=")) {
			result = FormulaT(carl::FormulaType::IFF, FormulasT(args.begin(), args.end()));
			return true;
		}
		return false;
	}
Пример #3
0
int _tmain(int argc, _TCHAR* argv[])
#endif
{
	int32_t iRet = RETVALUE_SUCCESS;
	
#ifdef __APPLE__
	_TCHAR** argv = convertArguments( argc, argvOriginal );
#endif
	

	//Initialize argument handler
	ArgumentHandler argumenthandler( ARRAYSIZE( options ), options );

	//Initialize a parser interface
	cri::CParser* parser = new cri::CParser;

	//Initialize error handler
	cri::CErrorPool *error = new cri::CErrorPool;
	error->setErrorTable( cri::g_ErrorTable_English, sizeof( cri::g_ErrorTable_English ) 
													 / sizeof( cri::g_ErrorTable_English[ 0 ] ) );
	//parse args
	argumenthandler.setErrorHandler( error );
	int32_t iArgOffset = argumenthandler.parse( argc, argv );

	//Set error output configuration
	error->suppressErrorLine( g_bsuppressErrorLine );

	if( !g_bSuppressBanner )
	{
		CRISCRIPT_VERSIONS ver = parser->getVersions();
		cout << "CriScript compiler and linker ver.";
		cout << ver.major << ".";
		cout << ver.minor << ".";
		cout << ver.revision << ".";
		cout << ver.build << "\n";
		cout << "CRI Middleware inc. 2008" << endl;
	}
	
	if( argc <= iArgOffset )
	{
		if( error->hasError() )
			error->dumpError();
		delete( error );

		//Output help info
		cout << endl;
		cout << "cscl.exe [options] source" << endl;
		cout << "Option switch:" << endl;
		for( int32_t i = 0; i < ARRAYSIZE( options ); ++ i )
		{
			wcout << options[ i ].strOption << " : " << options[ i ].strDescription << endl; 
		}

		delete( parser );

#ifdef __APPLE__
		deleteArguments( argc, argv );	
#endif
        return RETVALUE_SUCCESS;
	}


	//Open the target file
#ifdef __APPLE__
	ifstream fin ( argvOriginal[ iArgOffset ], ios::in | ios::binary );
#else
	ifstream fin ( argv[ iArgOffset ], ios::in | ios::binary );
#endif
    if( !fin )
	{
		wstring strArg1( argv[ iArgOffset ] );
		wstring strNull( L"" );
		error->report( ERROR_FILENOTFOUND, 0, 0, strArg1,
												strNull,
												strArg1 );
		error->dumpError();
		delete( error );
		delete( parser );

#ifdef __APPLE__
		deleteArguments( argc, argv );	
#endif
        return RETVALUE_TOOL_ERROR;
    }

	//Check file endianness;
	//Note that wchar_t is 4 byte in OSX.
	uint16_t c;
	fin.read( (char*)&c, sizeof( uint16_t ) );

	bool bSourceEndiannness = false;
	switch( c )
	{
	case 0xfeff:
		//Little endian
		break;
	case 0xfffe:
		//Big endian
		bSourceEndiannness = true;
		break;
	default:
		{
		wstring strArg1( argv[ iArgOffset ] );
		wstring strNull( L"" );
		error->report( ERROR_INVALIDFILEENCODING, 0, 0, strArg1,
												strNull,
												strArg1 );
		error->dumpError();
		delete( error );
        
		}
			delete( parser );
#ifdef __APPLE__
			deleteArguments( argc, argv );	
#endif
			return RETVALUE_TOOL_ERROR;
	}

	//Initialize the lexer
	cri::CFileStreamLexer *lex = new cri::CFileStreamLexer;
	
	//test	
	lex->init();
	
	lex->setEndianness( bSourceEndiannness );

	//Initialize the codegen
	cri::CCilCodeGen *codegen = new cri::CCilCodeGen;

	//Initialize the parser engine
	parser->init( lex, codegen, error );
	
	//Set filestream to the lexer
	lex->setStream( &fin, &wstring( argv[ iArgOffset ] ) );

#ifdef DEBUG_PARSING
	//debug
	cri::yydebug = 1;
#endif
	if( !g_bPerformLinkage )
	{
		iRet = Compile( parser, fin );
		g_bPerformExecution = false;
	}
	else
	{
		iRet = CompileAndLink( parser, fin );
	}

	if( error->hasError() )
	{
		error->dumpError();
		cout << "Compile failed." << endl;
		iRet = RETVALUE_COMPILE_ERROR;
	}
	else
	{
		if( error->hasInformation() )
		{
			iRet = RETVALUE_COMPILE_WARNING;
			cout << "Compile succeeded but with some warnings" << endl;
		}
		else
		{
			iRet = RETVALUE_SUCCESS;
			cout << "Compile succeeded." << endl;
		}
		
		error->dumpError();
	}

	if( g_bPerformExecution && iRet != RETVALUE_COMPILE_ERROR )
	{
		cri::CCilVm *vm = new cri::CCilVm;
		cri::CCilDebugger *debugger = new cri::CCilDebugger;

		vm->setILPool( &*parser->getILPool().begin(), parser->getILPool().size() );
		//Note:
		//setSymbolInformation need to be invoked before SetMetaData() for now
		vm->setSymbolInformation( parser->getSymbolInformation() );
		vm->setMetaData( parser->getMetaData() );

		cout << "-----------------------------------------------------------------\n";
		cri::CCilDisasm * disasm = new cri::CCilDisasm;
		disasm->setILStream( &*parser->getILPool().begin(), parser->getILPool().size() );
		disasm->setSymbolInformation( parser->getSymbolInformation() );
		disasm->setMetaData( parser->getMetaData() );
		disasm->dumpDisasm();
		cout << "-----------------------------------------------------------------\n";

		iRet = vm->execute();
		iRet = vm->getExitCode(); 

		debugger->attach( vm );
		debugger->setSymbolInformation( parser->getSymbolInformation() );
		debugger->setMetaData( parser->getMetaData() );
		
		debugger->debugDumpStats();
		debugger->debugDumpStaticFields( 0 );	//dump all fields
		debugger->debugDumpObjects( 0 );		//dump all objects

		delete( disasm );
		delete( debugger );
		delete( vm );
	}

	delete( lex );
	delete( error );
	delete( codegen );
	delete( parser );
	
#ifdef __APPLE__
	deleteArguments( argc, argv );	
#endif
		
	return iRet;
}