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


C++ TokenIterator::erase方法代码示例

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


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

示例1: expression

bool 
PreProcessor::elif_directive()
{
	assert(tokenit.is(_PP_ELIF));
	tokenit.next();

	if (ifBlockEnables.empty()) {
		ERROR("'if' directive is not found");
		return false;
	}

	bool if_is_enable = ifBlockEnables.back();
	if (if_is_enable) {
		TokenIterator tag = tokenit;
		skipUntilElseOrEnd();
		tag.erase(tokenit-tag);
	} else {
		AST *ast = expression();
		if (!ast) {
			return false;
		}
		if (eval(ast)) {
			ifBlockEnables.pop_back();
			ifBlockEnables.push_back(true);
		} else {
			TokenIterator tag = tokenit;
			skipUntilElseOrEnd();
			tag.erase(tokenit-tag);
		}
	}
	return true;
}
开发者ID:ktok07b6,项目名称:scc,代码行数:32,代码来源:PreProcessor.cpp

示例2: replaceMacroParams

void
PreProcessor::applyMacro(const String &ident, const ref<MacroDef> &macro)
{
	assert(tokenit.is(_IDENT));
	
	DBG("apply macro: %s", ident.c_str());
	if (macro->params.empty()) {
		tokenit.erase(1);//erase identifier
		tokenit.insert(macro->tokens);
	} else {
		TokenIterator tag = tokenit;
		tokenit.next();
		//get caller params
		if (tokenit.is(_LPAREN)) {
			tokenit.next();
			List<List<Token> > caller_params;
			if (!parseFunctionParams(caller_params)) {
				ERROR("failed to parse function macro");
				return;
			}
			if (macro->params.size() != caller_params.size()) {
				ERROR("macro %s requres %d parameters", 
					  ident.c_str(), macro->params.size());
				return;
			}
			tag.erase(tokenit-tag);//erase function call tokens

			//replace macro params
			List<Token> replace_tokens = replaceMacroParams(macro->tokens, caller_params);
			tokenit.insert(replace_tokens);
			//tokenit.next();
		}
	}
}
开发者ID:ktok07b6,项目名称:scc,代码行数:34,代码来源:PreProcessor.cpp

示例3: found

bool 
PreProcessor::else_directive()
{
	assert(tokenit.is(_PP_ELSE));
	tokenit.next();
	if (!tokenit.is(_PP_END)) {
		//TODO: warning
	} 
	tokenit.skipUntil({_PP_END}, true);
	tokenit.next();

	if (ifBlockEnables.empty()) {
		ERROR("'if' directive is not found (before 'else')");
		return false;
	}
	bool if_is_enable = ifBlockEnables.back();
	if (if_is_enable) {
		TokenIterator tag = tokenit;
		skipUntilElseOrEnd();
		tag.erase(tokenit-tag);
	} else {
		ifBlockEnables.pop_back();
		ifBlockEnables.push_back(true);
	}

	return true;
}
开发者ID:ktok07b6,项目名称:scc,代码行数:27,代码来源:PreProcessor.cpp

示例4:

List<Token> 
PreProcessor::replaceMacroParams(const List<Token> &mtokens, const List<List<Token>> &caller_params)
{
	//FIXME: nested macro
	//i.e. FUNC(x, FUNC(x,y))

	List<Token> replace = mtokens;
	TokenIterator it;
	it.setTokens(&replace);
	while (!it.eof()) {
		if (it.is(_PP_MACRO_PARAM)) {
			int index = it.val()->toInt();
			const List<Token> &param = caller_params.at(index);
			it.erase(1);
			it.insert(param);
		}
		it.next();
	}
	return replace;
}
开发者ID:ktok07b6,项目名称:scc,代码行数:20,代码来源:PreProcessor.cpp


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