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