本文整理汇总了C++中Translator::equivalentDataType方法的典型用法代码示例。如果您正苦于以下问题:C++ Translator::equivalentDataType方法的具体用法?C++ Translator::equivalentDataType怎么用?C++ Translator::equivalentDataType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Translator
的用法示例。
在下文中一共展示了Translator::equivalentDataType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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;
}