diff --git a/version0.7/pda.h b/version0.7/pda.h deleted file mode 100644 index cddf77e..0000000 --- a/version0.7/pda.h +++ /dev/null @@ -1,238 +0,0 @@ -#ifndef __PDA_H__ -#define __PDA_H__ - -#include - -struct parse_unit -{ - int line; - int type; -}; - -enum token_type -{ - __stack_end, - __null_end,// $ - __equal,// = - __cmp_equal,// == - __cmp_not_equal,// != - __cmp_less,__cmp_less_or_equal,// < <= - __cmp_more,__cmp_more_or_equal,// > >= - __and_operator,__or_operator,__nor_operator,// and or ! - __add_operator,__sub_operator,__mul_operator,__div_operator,__link_operator,// + - * / ~ - __add_equal,__sub_equal,__mul_equal,__div_equal,__link_equal,// += -= *= /= ~= - __left_brace,__right_brace,// {} - __left_bracket,__right_bracket,// [] - __left_curve,__right_curve,// () - __semi,// ; - __comma,// , - __colon,// : - __dot,// . - __var,// var reserve word - __func,// func reserve word - __id,__identifier,__identifiers,__identifier_end,__lacked_identifier, - __parameter,__parameters,__parameter_end, - __number,__string, - __scalar,__scalars,__scalar_end, - __list,__hash, - __hash_member,__hash_members,__hash_member_end,__hash_suffix, - __statement,__statements, - __function,//function(){} - __definition, - __assignment,__pre_assignment, - __calculation, - __loop,__continue,__break,__for,__forindex,__foreach,__while,// for()while() continue; break; - __choose,__if,__elsif,__else,// if else if else - __return -}; - -const int max_token_len=20; -struct cmp_seq -{ - int tokens[max_token_len]; - int res; -}par[]= -{ - {{__var,__identifier,__equal,__scalar,__semi}, __definition}, - {{__var,__identifier,__equal,__identifier,__semi}, __definition}, - {{__var,__identifier,__equal,__list,__semi}, __definition}, - {{__var,__identifier,__equal,__hash,__semi}, __definition}, - {{__var,__identifier,__equal,__function}, __definition}, - {{__var,__left_curve,__identifiers,__right_curve,__equal,__identifier,__semi},__definition}, - {{__var,__left_curve,__identifiers,__right_curve,__equal,__list,__semi}, __definition}, - {{__identifier,__dot,__identifier}, __identifier}, - {{__identifier,__left_bracket,__scalar,__right_bracket}, __identifier}, - {{__identifier,__left_bracket,__identifier,__right_bracket}, __identifier}, - {{__identifier,__left_bracket,__calculation,__right_bracket}, __identifier}, - {{__identifier,__left_curve,__right_curve}, __identifier}, - {{__identifier,__left_curve,__scalar,__right_curve}, __identifier} -}; -int num_of_par=sizeof(par)/sizeof(cmp_seq); - -class PDA -{ - private: - std::stack main_stack; - std::stack error_stack; - public: - void stack_input(std::stack& temp) - { - while(!temp.empty()) - { - main_stack.push(temp.top()); - temp.pop(); - } - return; - } - void print_error() - { - if(!error_stack.empty()) - { - std::stack temp; - while(!error_stack.empty()) - { - temp.push(error_stack.top()); - error_stack.pop(); - } - std::cout<<">>[Error] Parse error:"; - int now_line=0; - while(!temp.empty()) - { - if(temp.top().line!=now_line) - { - now_line=temp.top().line; - std::cout<>[Parse] 0 error occurred."< recognized_stack; - std::stack comp_stack; - parse_unit temp; - temp.line=0; - temp.type=0; - for(int i=0;i=0;--j) - { - if(par[i].tokens[j]) - { - temp.type=par[i].tokens[j]; - comp_stack.push(temp); - } - } - while((!comp_stack.empty()) && (!main_stack.empty())) - { - if(comp_stack.top().type==main_stack.top().type) - { - comp_stack.pop(); - recognized_stack.push(main_stack.top()); - main_stack.pop(); - } - else if(comp_stack.top().type==__null_end) - comp_stack.pop(); - else if(comp_stack.top().type!=main_stack.top().type) - { - if(!extend_comp_progress(comp_stack.top().type)) - { - while(!recognized_stack.empty()) - { - main_stack.push(recognized_stack.top()); - recognized_stack.pop(); - } - break; - } - else - comp_stack.pop(); - } - } - if(comp_stack.empty()) - { - while(!recognized_stack.empty()) - recognized_stack.pop(); - return true; - } - } - } - return false; - } - void main_comp_progress() - { - std::stack recognized_stack; - std::stack comp_stack; - parse_unit temp; - temp.line=0; - temp.type=0; - - while(!main_stack.empty()) - { - bool ispar=false; - for(int i=0;i=0;--j) - { - if(par[i].tokens[j]) - { - temp.type=par[i].tokens[j]; - comp_stack.push(temp); - } - } - while((!comp_stack.empty()) && (!main_stack.empty())) - { - if(comp_stack.top().type==main_stack.top().type) - { - comp_stack.pop(); - recognized_stack.push(main_stack.top()); - main_stack.pop(); - } - else if(comp_stack.top().type==__null_end) - comp_stack.pop(); - else if(comp_stack.top().type!=main_stack.top().type) - { - if(!extend_comp_progress(comp_stack.top().type)) - { - while(!recognized_stack.empty()) - { - main_stack.push(recognized_stack.top()); - recognized_stack.pop(); - } - break; - } - else - comp_stack.pop(); - } - } - if(comp_stack.empty()) - { - while(!recognized_stack.empty()) - recognized_stack.pop(); - ispar=true; - break; - } - } - if(!ispar && !main_stack.empty()) - { - error_stack.push(main_stack.top()); - main_stack.pop(); - } - } - print_error(); - return; - } -}; -#endif