From e4b4086984c52b39ed7db67f7d99bb6af105cdad Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sun, 11 Aug 2019 23:16:40 +0800 Subject: [PATCH] Add function recognition --- version0.2/nasal_func_stack.h | 3 +- version0.2/nasal_functional.cpp | 98 +++++++++++++++++++++++++++++---- version0.2/nasal_functional.h | 6 +- 3 files changed, 94 insertions(+), 13 deletions(-) diff --git a/version0.2/nasal_func_stack.h b/version0.2/nasal_func_stack.h index 681f9f2..ee11dfe 100644 --- a/version0.2/nasal_func_stack.h +++ b/version0.2/nasal_func_stack.h @@ -74,7 +74,8 @@ class func_stack while(temp->next) { temp=temp->next; - std::cout<<"function: "<func_name<func_name; + temp->func_statement.print_info(); } return; } diff --git a/version0.2/nasal_functional.cpp b/version0.2/nasal_functional.cpp index af0bb6f..163560b 100644 --- a/version0.2/nasal_functional.cpp +++ b/version0.2/nasal_functional.cpp @@ -72,6 +72,7 @@ func::func() parameter_head=new parameter; parameter_head->param_var.type=VAR_NONE; parameter_head->param_var.data=NULL; + parameter_head->var_name="__null_var"; parameter_head->next=NULL; } func::func(const func& temp) @@ -94,7 +95,9 @@ func::func(const func& temp) { temp_param=temp_param->next; parameter_temp->next=new parameter; + parameter_temp=parameter_temp->next; parameter_temp->param_var=temp_param->param_var; + parameter_temp->var_name=temp_param->var_name; parameter_temp->next=NULL; } } @@ -141,7 +144,7 @@ func& func::operator=(const func& temp) } if(parameter_temp) { - while(parameter_temp->next) + while(parameter_temp->next) { parameter_last=parameter_temp; parameter_temp=parameter_temp->next; @@ -167,19 +170,29 @@ func& func::operator=(const func& temp) { temp_param=temp_param->next; parameter_temp->next=new parameter; + parameter_temp=parameter_temp->next; parameter_temp->param_var=temp_param->param_var; + parameter_temp->var_name=temp_param->var_name; parameter_temp->next=NULL; } return *this; } -void func::append_var(var& p) +void func::append_var(std::string& varia_name,var& p) { parameter *parameter_temp=parameter_head; while(parameter_temp->next) + { parameter_temp=parameter_temp->next; + if(parameter_temp->var_name==varia_name) + { + std::cout<<"[Error] Redefinition of var \""<next=new parameter; parameter_temp=parameter_temp->next; parameter_temp->param_var=p; + parameter_temp->var_name=varia_name; parameter_temp->next=NULL; return; } @@ -196,6 +209,25 @@ void func::append_token(const int _line,const int _type,std::string &_content) statement_temp->next=NULL; return; } +void func::print_info() +{ + parameter *para_temp=parameter_head; + token_unit *token_temp=statement_head; + std::cout<<"\n\t[parameter] :"; + while(para_temp->next) + { + para_temp=para_temp->next; + std::cout<var_name<<" "; + } + std::cout<<"\n\t[statement] :"; + while(token_temp->next) + { + token_temp=token_temp->next; + std::cout<content<<" "; + } + std::cout<