forked from xxq250/Nasal-Interpreter
Bug fixed
This commit is contained in:
@@ -47,7 +47,6 @@ class abstract_syntax_tree
|
||||
var_list.clear();
|
||||
else
|
||||
var_list=temp.var_list;
|
||||
|
||||
if(temp.var_changed_list.empty())
|
||||
var_changed_list.clear();
|
||||
else
|
||||
@@ -71,8 +70,21 @@ class abstract_syntax_tree
|
||||
children.clear();
|
||||
else
|
||||
children=temp.children;
|
||||
if(temp.var_list.empty())
|
||||
var_list.clear();
|
||||
else
|
||||
var_list=temp.var_list;
|
||||
if(temp.var_changed_list.empty())
|
||||
var_changed_list.clear();
|
||||
else
|
||||
var_changed_list=temp.var_changed_list;
|
||||
if(temp.var_content_list.empty())
|
||||
var_content_list.clear();
|
||||
else
|
||||
var_content_list=temp.var_content_list;
|
||||
var_number=temp.var_number;
|
||||
var_string=temp.var_string;
|
||||
id_name=temp.id_name;
|
||||
return *this;
|
||||
}
|
||||
void tree_set_clear()
|
||||
@@ -92,22 +104,24 @@ class abstract_syntax_tree
|
||||
std::cout<<indent;
|
||||
if(ast_node_type==__number)
|
||||
{
|
||||
std::cout<<"[Number:"<<var_number<<"]"<<std::endl;
|
||||
std::cout<<"{Number:"<<var_number<<"}"<<std::endl;
|
||||
return;
|
||||
}
|
||||
else if(ast_node_type==__string)
|
||||
{
|
||||
std::cout<<"[String:"<<var_string<<"]"<<std::endl;
|
||||
std::cout<<"{String:"<<var_string<<"}"<<std::endl;
|
||||
return;
|
||||
}
|
||||
else if(ast_node_type==__id)
|
||||
{
|
||||
std::cout<<"[Identifier:"<<id_name<<"]"<<std::endl;
|
||||
std::cout<<"{Identifier:"<<id_name<<"}"<<std::endl;
|
||||
return;
|
||||
}
|
||||
else if(ast_node_type==__definition)
|
||||
{
|
||||
std::cout<<"{ Definition"<<std::endl<<indent<<" [Var]"<<std::endl;
|
||||
std::cout<<"{ Type:";
|
||||
print_token(ast_node_type);
|
||||
std::cout<<std::endl<<indent<<" [Var]"<<std::endl;
|
||||
for(std::list<abstract_syntax_tree>::iterator i=var_list.begin();i!=var_list.end();++i)
|
||||
i->print_ast_node(tab_num+1);
|
||||
std::cout<<indent<<" [Content]"<<std::endl;
|
||||
|
||||
@@ -851,15 +851,14 @@ abstract_syntax_tree generator::in_curve_calc_expr()
|
||||
}
|
||||
get_token();
|
||||
get_token();
|
||||
// unfinished
|
||||
|
||||
int temp_type=this_token.type;
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __sub_operator:node.set_two_operator(temp_type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:node.set_two_operator(this_token.type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(this_token.type,node,link_operator_expr());break;
|
||||
case __div_operator:node.set_two_operator(temp_type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(temp_type,node,link_operator_expr());break;
|
||||
case __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
@@ -867,7 +866,7 @@ abstract_syntax_tree generator::in_curve_calc_expr()
|
||||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(temp_type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
return node;
|
||||
@@ -877,13 +876,14 @@ abstract_syntax_tree generator::number_begin_expr()
|
||||
abstract_syntax_tree node;
|
||||
node.set_node_to_number(this_token.content);
|
||||
get_token();
|
||||
int temp_type=this_token.type;
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __sub_operator:node.set_two_operator(temp_type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:node.set_two_operator(this_token.type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(this_token.type,node,link_operator_expr());break;
|
||||
case __div_operator:node.set_two_operator(temp_type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(temp_type,node,link_operator_expr());break;
|
||||
case __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
@@ -891,7 +891,7 @@ abstract_syntax_tree generator::number_begin_expr()
|
||||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(temp_type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
return node;
|
||||
@@ -901,13 +901,14 @@ abstract_syntax_tree generator::string_begin_expr()
|
||||
abstract_syntax_tree node;
|
||||
node.set_node_to_string(this_token.content);
|
||||
get_token();
|
||||
int temp_type=this_token.type;
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __sub_operator:node.set_two_operator(temp_type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:node.set_two_operator(this_token.type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(this_token.type,node,link_operator_expr());break;
|
||||
case __div_operator:node.set_two_operator(temp_type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(temp_type,node,link_operator_expr());break;
|
||||
case __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
@@ -915,7 +916,7 @@ abstract_syntax_tree generator::string_begin_expr()
|
||||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(temp_type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
return node;
|
||||
@@ -1014,16 +1015,17 @@ abstract_syntax_tree generator::identifier_begin_expr()
|
||||
node.set_node_to_id(this_token.content);
|
||||
|
||||
get_token();
|
||||
int temp_type=this_token.type;
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __left_bracket:node=call_list_expr();break;
|
||||
case __left_curve:node=call_function_expr();break;
|
||||
case __dot:node=call_hash_expr();break;
|
||||
case __add_operator:
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __sub_operator:node.set_two_operator(temp_type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:node.set_two_operator(this_token.type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(this_token.type,node,link_operator_expr());break;
|
||||
case __div_operator:node.set_two_operator(temp_type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(temp_type,node,link_operator_expr());break;
|
||||
case __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
@@ -1031,17 +1033,18 @@ abstract_syntax_tree generator::identifier_begin_expr()
|
||||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(temp_type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
get_token();
|
||||
temp_type=this_token.type;
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __sub_operator:node.set_two_operator(temp_type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:node.set_two_operator(this_token.type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(this_token.type,node,link_operator_expr());break;
|
||||
case __div_operator:node.set_two_operator(temp_type,node,mul_div_operator_expr());break;
|
||||
case __link_operator:node.set_two_operator(temp_type,node,link_operator_expr());break;
|
||||
case __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
@@ -1049,7 +1052,7 @@ abstract_syntax_tree generator::identifier_begin_expr()
|
||||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(temp_type,node,compare_operator_expr());break;
|
||||
case __equal:
|
||||
case __add_equal:
|
||||
case __sub_equal:
|
||||
|
||||
Reference in New Issue
Block a user