当前位置: 首页>>代码示例>>C++>>正文


C++ Translator::getExpression方法代码示例

本文整理汇总了C++中Translator::getExpression方法的典型用法代码示例。如果您正苦于以下问题:C++ Translator::getExpression方法的具体用法?C++ Translator::getExpression怎么用?C++ Translator::getExpression使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Translator的用法示例。


在下文中一共展示了Translator::getExpression方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: printTranslate

// PRINT command translate function
TokenStatus printTranslate(Translator &translator, Token *commandToken,
	Token *&token)
{
	TokenStatus status;
	Token *lastSemiColon = NULL;
	bool separator = false;
	bool printFunction = false;

	forever
	{
		if ((status = translator.getExpression(token, None_DataType))
			!= Done_TokenStatus)
		{
			if (status == Parser_TokenStatus
				&& token->isDataType(None_DataType))
			{
				if (translator.doneStackEmpty())
				{
					status = ExpExprCommaPfnOrEnd_TokenStatus;
				}
				// change parser error if not inside paren
				else if (translator.doneStackTopToken()
					->isDataType(None_DataType))
				{
					status = ExpSemiCommaOrEnd_TokenStatus;
				}
				else  // not a print function
				{
					status = ExpOpSemiCommaOrEnd_TokenStatus;
				}
			}
			break;
		}

		if (!translator.doneStackEmpty())
		{
			if (translator.doneStackTopToken()->isDataType(None_DataType))
			{
				translator.doneStackDrop();  // print function
				printFunction = true;
			}
			else  // append appropriate print code for done stack top item
			{
				Token *printToken = translator.table().newToken(PrintDbl_Code);
				translator.processFinalOperand(printToken);
				printFunction = false;
			}
			separator = true;
			delete lastSemiColon;
			lastSemiColon = NULL;
		}

		if (token->isCode(Comma_Code))
		{
			if (lastSemiColon != NULL)
			{
				status = ExpExprPfnOrEnd_TokenStatus;
				break;
			}
			translator.outputAppend(token);
			delete lastSemiColon;
			lastSemiColon = NULL;
		}
		else if (token->isCode(SemiColon_Code))
		{
			if (!separator)
			{
				status = lastSemiColon == NULL
					? ExpExprCommaPfnOrEnd_TokenStatus
					: ExpExprPfnOrEnd_TokenStatus;
				break;
			}
			delete lastSemiColon;
			lastSemiColon = token;
		}
		else  // some other token, maybe end-of-statement
		{
			break;  // exit loop
		}
		separator = false;
		token = NULL;
	}

	if (status != Done_TokenStatus)
	{
		delete lastSemiColon;
		delete commandToken;
		return status;
	}

	if (lastSemiColon != NULL)
	{
		// append last semicolon token as command token
		delete commandToken;
		commandToken = lastSemiColon;
	}
	translator.outputAppend(commandToken);

	if (!translator.table().hasFlag(token, EndStmt_Flag))
//.........这里部分代码省略.........
开发者ID:thunder422,项目名称:ibcp,代码行数:101,代码来源:print.cpp

示例2: inputTranslate

// INPUT command translate function
TokenStatus inputTranslate(Translator &translator, Token *commandToken,
	Token *&token)
{
	TokenStatus status;
	int indexBegin;
	bool done;
	Token *inputToken;

	if (commandToken->isCode(Input_Code))
	{
		token = translator.table().newToken(InputBegin_Code);
	}
	else  // InputPrompt_Code
	{
		token = NULL;
		status = translator.getExpression(token, String_DataType);
		if (status != Done_TokenStatus)
		{
			if (status == Parser_TokenStatus
				&& token->isDataType(None_DataType))
			{
				status = ExpSemiOrComma_TokenStatus;
			}
			delete commandToken;
			return status;
		}
		translator.doneStackDrop();
		if (token->isCode(Comma_Code))
		{
			token->addSubCode(Option_SubCode);
		}
		else if (!token->isCode(SemiColon_Code))
		{
			delete commandToken;
			return ExpOpSemiOrComma_TokenStatus;
		}
		token->setCode(InputBeginStr_Code);
	}

	// save index where to insert input parse codes and append input begin
	indexBegin = translator.outputCount();
	translator.outputAppend(token);

	// loop to read input variables
	do
	{
		// get variable reference
		token = NULL;
		if ((status = translator.getOperand(token, Any_DataType,
			Translator::Variable_Reference)) != Good_TokenStatus)
		{
			break;
		}

		// get and check next token
		if ((status = translator.getToken(token)) != Good_TokenStatus)
		{
			status = ExpCommaSemiOrEnd_TokenStatus;
			break;
		}
		if (token->isCode(Comma_Code))
		{
			done = false;
			inputToken = token;
		}
		else if (token->isCode(SemiColon_Code))
		{
			commandToken->addSubCode(Option_SubCode);
			done = true;
			inputToken = token;

			// get and check next token
			if ((status = translator.getToken(token)) != Good_TokenStatus)
			{
				status = ExpEndStmt_TokenStatus;
				break;
			}
		}
		else  // possible end-of-statement (checked below)
		{
			done = true;
			inputToken = new Token;
		}

		// change token to appropriate assign code and append to output
		translator.table().setToken(inputToken, InputAssign_Code);
		status = translator.processFinalOperand(inputToken);
		if (status != Good_TokenStatus)
		{
			break;
		}

		// create and insert input parse code at beginning
		// (inserted in reverse order for each input variable)
		translator.outputInsert(indexBegin, translator.table()
			.newToken(translator.table()
			.secondAssociatedCode(inputToken->code())));
	}
	while (!done);
//.........这里部分代码省略.........
开发者ID:thunder422,项目名称:ibcp,代码行数:101,代码来源:input.cpp

示例3: letTranslate


//.........这里部分代码省略.........
			}
			return ExpEqualOrComma_TokenStatus;
		}

		// check if this is a sub-string assignment
		if (translator.table().hasFlag(translator.doneStackTopToken(),
			SubStr_Flag))
		{
			// delete comma/equal token, use sub-string function token
			delete token;

			// get sub-string function token from rpn item on top of stack
			// (delete rpn item since it was not appended to output)
			RpnItem *rpnItem = translator.doneStackPop();
			token = rpnItem->token();
			rpnItem->setToken(NULL);  // prevent delete of token
			delete rpnItem;

			// change to assign sub-string code (first associated code)
			translator.table().setToken(token,
				translator.table().associatedCode(token->code()));

			haveSubStr = true;
		}
		else  // use comma/equal token
		{
			// change token to appropriate assign code
			translator.table().setToken(token, Assign_Code);
			status = translator.processDoneStackTop(token);
			if (status != Good_TokenStatus)
			{
				return status;
			}
		}
		letStack.push(token);  // save token

		// get data type for assignment
		if (dataType == Any_DataType)
		{
			dataType = token->dataType();
		}

		token = NULL;
	}
	while (!done);

	// get expression for value to assign
	if ((status = translator.getExpression(token,
		translator.equivalentDataType(dataType))) != Done_TokenStatus)
	{
		if (status == Parser_TokenStatus && token->isDataType(None_DataType))
		{
			status = ExpOpOrEnd_TokenStatus;
		}
		return status;
	}

	Token *letToken = letStack.pop();
	if (!letStack.isEmpty())
	{
		if (haveSubStr)
		{
			// add each token saved in let stack except the last
			do
			{
				// change to keep code (second associated code)
				translator.table().setToken(letToken,
					translator.table().associatedCode(letToken->code()));

				// append to output and pop next token from let stack
				translator.outputAppend(letToken);
				letToken = letStack.pop();
			}
			while (!letStack.isEmpty());  // continue until last token
		}
		else  // have a multiple assignment, change to list code
		{
			translator.table().setToken(letToken,
				translator.table().secondAssociatedCode(letToken->code()));
		}
	}

	// drop expresion result from done stack, append last assignment token
	translator.doneStackDrop();
	translator.outputAppend(letToken);

	// set hidden LET flag if needed
	if (!hidden)
	{
		letToken->addSubCode(Option_SubCode);
	}

	// check terminating token for end-of-statement
	if (!translator.table().hasFlag(token, EndStmt_Flag))
	{
		return ExpOpOrEnd_TokenStatus;
	}

	return Done_TokenStatus;
}
开发者ID:thunder422,项目名称:ibcp,代码行数:101,代码来源:let.cpp


注:本文中的Translator::getExpression方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。