Update
This commit is contained in:
parent
305de47723
commit
a5acf83ae2
|
@ -34,6 +34,21 @@ class abstract_syntax_tree
|
|||
var_number=temp.var_number;
|
||||
var_string=temp.var_string;
|
||||
}
|
||||
abstract_syntax_tree& operator=(const abstract_syntax_tree temp)
|
||||
{
|
||||
ast_node_type=temp.ast_node_type;
|
||||
if(temp.statement_list.empty())
|
||||
statement_list.clear();
|
||||
else
|
||||
statement_list=temp.statement_list;
|
||||
if(temp.children.empty())
|
||||
children.clear();
|
||||
else
|
||||
children=temp.children;
|
||||
var_number=temp.var_number;
|
||||
var_string=temp.var_string;
|
||||
return *this;
|
||||
}
|
||||
void tree_set_clear()
|
||||
{
|
||||
statement_list.clear();
|
||||
|
@ -155,6 +170,22 @@ class abstract_syntax_tree
|
|||
ast_node_type=__hash;
|
||||
return;
|
||||
}
|
||||
// for identifier node
|
||||
void set_node_to_id(std::string& name)
|
||||
{
|
||||
ast_node_type=__id;
|
||||
id_name=name;
|
||||
return;
|
||||
}
|
||||
// for dynamic identifier
|
||||
void set_node_to_dynid(std::string& name)
|
||||
{
|
||||
ast_node_type=__dynamic_id;
|
||||
id_name="";
|
||||
for(int i=0;i<(int)name.length()-3;++i)
|
||||
id_name+=name[i];
|
||||
return;
|
||||
}
|
||||
// for leaf node string
|
||||
void set_node_to_string(std::string& str)
|
||||
{
|
||||
|
|
|
@ -810,14 +810,16 @@ abstract_syntax_tree generator::in_curve_calc_expr()
|
|||
}
|
||||
abstract_syntax_tree generator::number_begin_expr()
|
||||
{
|
||||
abstract_syntax_tree node;
|
||||
node.set_node_to_number(this_token.content);
|
||||
get_token();
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:add_sub_operator_expr();break;
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:mul_div_operator_expr();break;
|
||||
case __link_operator:link_operator_expr();break;
|
||||
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 __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
|
@ -825,21 +827,23 @@ abstract_syntax_tree generator::number_begin_expr()
|
|||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:compare_operator_expr();break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
return;
|
||||
return node;
|
||||
}
|
||||
abstract_syntax_tree generator::string_begin_expr()
|
||||
{
|
||||
abstract_syntax_tree node;
|
||||
node.set_node_to_string(this_token.content);
|
||||
get_token();
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:add_sub_operator_expr();break;
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:mul_div_operator_expr();break;
|
||||
case __link_operator:link_operator_expr();break;
|
||||
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 __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
|
@ -847,10 +851,10 @@ abstract_syntax_tree generator::string_begin_expr()
|
|||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:compare_operator_expr();break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
return;
|
||||
return node;
|
||||
}
|
||||
abstract_syntax_tree generator::call_list_expr()
|
||||
{
|
||||
|
@ -931,23 +935,26 @@ abstract_syntax_tree generator::call_function_expr()
|
|||
abstract_syntax_tree generator::call_hash_expr()
|
||||
{
|
||||
get_token();
|
||||
identifier_begin_expr();
|
||||
return;
|
||||
return identifier_begin_expr();
|
||||
}
|
||||
abstract_syntax_tree generator::identifier_begin_expr()
|
||||
{
|
||||
// __id has been checked
|
||||
abstract_syntax_tree node;
|
||||
|
||||
node.set_node_to_id(this_token.content);
|
||||
|
||||
get_token();
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __left_bracket:call_list_expr();break;
|
||||
case __left_curve:call_function_expr();break;
|
||||
case __dot:call_hash_expr();break;
|
||||
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:add_sub_operator_expr();break;
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:mul_div_operator_expr();break;
|
||||
case __link_operator:link_operator_expr();break;
|
||||
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 __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
|
@ -955,17 +962,17 @@ abstract_syntax_tree generator::identifier_begin_expr()
|
|||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:compare_operator_expr();break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
get_token();
|
||||
switch(this_token.type)
|
||||
{
|
||||
case __add_operator:
|
||||
case __sub_operator:add_sub_operator_expr();break;
|
||||
case __sub_operator:node.set_two_operator(this_token.type,node,add_sub_operator_expr());break;
|
||||
case __mul_operator:
|
||||
case __div_operator:mul_div_operator_expr();break;
|
||||
case __link_operator:link_operator_expr();break;
|
||||
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 __and_operator:
|
||||
case __or_operator:
|
||||
case __cmp_equal:
|
||||
|
@ -973,16 +980,16 @@ abstract_syntax_tree generator::identifier_begin_expr()
|
|||
case __cmp_less:
|
||||
case __cmp_more:
|
||||
case __cmp_less_or_equal:
|
||||
case __cmp_more_or_equal:compare_operator_expr();break;
|
||||
case __cmp_more_or_equal:node.set_two_operator(this_token.type,node,compare_operator_expr());break;
|
||||
case __equal:
|
||||
case __add_equal:
|
||||
case __sub_equal:
|
||||
case __mul_equal:
|
||||
case __div_equal:
|
||||
case __link_equal:assignment_expr();break;
|
||||
case __link_equal:node=assignment_expr();break;
|
||||
default:parse.push(this_token);break;
|
||||
}
|
||||
return;
|
||||
return node;
|
||||
}
|
||||
void generator::gen_main_work()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue