#ifndef __NASAL_PARSER_H__ #define __NASAL_PARSER_H__ class nasal_parser { private: std::stack parse; token this_token; int error; int warning; public: nasal_parser() { error=0; warning=0; this_token.type=0; } void get_token() { if(parse.empty()) { this_token.type=0; return; } this_token=parse.top(); parse.pop(); return; } int get_error_num() { return error; } void print_parser_stack() { if(parse.empty()) return; int line=0; std::stack temp; while(!parse.empty()) { temp.push(parse.top()); if(line!=temp.top().line) { if(line+1==temp.top().line) { line=temp.top().line; if(line==1) std::cout<<"line "< "; parse.pop(); } while(!temp.empty()) { parse.push(temp.top()); temp.pop(); } std::cout<& lexer) { while(!parse.empty()) parse.pop(); std::stack temp; for(std::list::iterator i=lexer.begin();i!=lexer.end();++i) { token temp_parse; temp_parse=*i; temp.push(temp_parse);//push this into stack } if(temp.empty()) { std::cout<<">>[Parse] warning: empty lexer list."<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] line "<>[Error] parse stack empty."<>[Parse] complete generation."<