示例#1
0
// 获取下一个词,返回的类型为Token
Token TokenAnalyze::next_token()
{
	
	if(!ahead_list.empty())  // 当aheadlist不是空的时候,从这里读取
	{
		Token temp = ahead_list.front();
		ahead_list.pop_front();
		return temp;
	}
	else if(has_tokens())  // 还存在tokens
	{
		return _next_token();
	}
	else
	{
		return Token("",token_type::ENDOFFILE,line_number);
	}
}
示例#2
0
// 超前读取一个字符
list<Token> TokenAnalyze::look_ahead(int num)  // 这里的num表示要读取的个数
{
	//Token temp = _next_token(); // 临时保存
	//ahead_list.push_back(temp);
	//return temp;
	list<Token> temp;
	int i = 0;
	for(list<Token>::iterator iter = ahead_list.begin();i < ahead_list.size() && i < num;iter ++,i ++)
	{
		temp.push_back((*iter)); // 这里将所有的量放到temp
	}

	if((i + 1)!= ahead_list.size())   // 说明没有读取足够的Token
	{
		for(;i < num;i ++)
		{
			Token tmp = _next_token();
			ahead_list.push_back(tmp);
			temp.push_back(tmp);
		}
	}
	return temp;
}
示例#3
0
/*
 * Advance to next token
 * @return true on success, false otherwise
 */
bool 
_lex::next_token(void)
{
	return _next_token();
}