diff --git a/misc/nasal_parser.h b/misc/nasal_parser.h new file mode 100644 index 0000000..a502a24 --- /dev/null +++ b/misc/nasal_parser.h @@ -0,0 +1,1473 @@ +#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."<