// 获取下一个词,返回的类型为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); } }
// 超前读取一个字符 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; }
/* * Advance to next token * @return true on success, false otherwise */ bool _lex::next_token(void) { return _next_token(); }