parent
816be43a98
commit
aa797142d1
|
@ -51,7 +51,6 @@ private:
|
||||||
void die(int,std::string&&);
|
void die(int,std::string&&);
|
||||||
void match(int type,const char* err_info="");
|
void match(int type,const char* err_info="");
|
||||||
bool check_comma(int*);
|
bool check_comma(int*);
|
||||||
bool check_multi_def();
|
|
||||||
bool check_multi_scalar();
|
bool check_multi_scalar();
|
||||||
bool check_function_end(nasal_ast&);
|
bool check_function_end(nasal_ast&);
|
||||||
bool check_special_call();
|
bool check_special_call();
|
||||||
|
@ -67,6 +66,7 @@ private:
|
||||||
nasal_ast hmem_gen();
|
nasal_ast hmem_gen();
|
||||||
nasal_ast func_gen();
|
nasal_ast func_gen();
|
||||||
nasal_ast args_gen();
|
nasal_ast args_gen();
|
||||||
|
nasal_ast lcurve_expr();
|
||||||
nasal_ast expr();
|
nasal_ast expr();
|
||||||
nasal_ast exprs();
|
nasal_ast exprs();
|
||||||
nasal_ast calc();
|
nasal_ast calc();
|
||||||
|
@ -179,10 +179,6 @@ bool nasal_parse::check_comma(int* panic_set)
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool nasal_parse::check_multi_def()
|
|
||||||
{
|
|
||||||
return tok_list[ptr+1].type==tok_var;
|
|
||||||
}
|
|
||||||
bool nasal_parse::check_multi_scalar()
|
bool nasal_parse::check_multi_scalar()
|
||||||
{
|
{
|
||||||
int check_ptr=ptr,curve_cnt=1,bracket_cnt=0,brace_cnt=0;
|
int check_ptr=ptr,curve_cnt=1,bracket_cnt=0,brace_cnt=0;
|
||||||
|
@ -442,6 +438,12 @@ nasal_ast nasal_parse::args_gen()
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
nasal_ast nasal_parse::lcurve_expr()
|
||||||
|
{
|
||||||
|
if(tok_list[ptr+1].type==tok_var)
|
||||||
|
return definition();
|
||||||
|
return check_multi_scalar()?multi_assgin():calc();
|
||||||
|
}
|
||||||
nasal_ast nasal_parse::expr()
|
nasal_ast nasal_parse::expr()
|
||||||
{
|
{
|
||||||
nasal_ast node(tok_list[ptr].line,ast_null);
|
nasal_ast node(tok_list[ptr].line,ast_null);
|
||||||
|
@ -460,18 +462,18 @@ nasal_ast nasal_parse::expr()
|
||||||
case tok_lbracket:
|
case tok_lbracket:
|
||||||
case tok_lbrace:
|
case tok_lbrace:
|
||||||
case tok_sub:
|
case tok_sub:
|
||||||
case tok_not: node=calc(); break;
|
case tok_not: node=calc(); break;
|
||||||
case tok_var: node=definition(); break;
|
case tok_var: node=definition(); break;
|
||||||
case tok_lcurve: node=(check_multi_def()?definition():(check_multi_scalar()?multi_assgin():calc()));break;
|
case tok_lcurve: node=lcurve_expr(); break;
|
||||||
case tok_for:
|
case tok_for:
|
||||||
case tok_forindex:
|
case tok_forindex:
|
||||||
case tok_foreach:
|
case tok_foreach:
|
||||||
case tok_while: node=loop(); break;
|
case tok_while: node=loop(); break;
|
||||||
case tok_if: node=conditional(); break;
|
case tok_if: node=conditional(); break;
|
||||||
case tok_continue: node=continue_expr(); break;
|
case tok_continue: node=continue_expr(); break;
|
||||||
case tok_break: node=break_expr(); break;
|
case tok_break: node=break_expr(); break;
|
||||||
case tok_ret: node=ret_expr(); break;
|
case tok_ret: node=ret_expr(); break;
|
||||||
case tok_semi: break;
|
case tok_semi: break;
|
||||||
default:error_token.push_back(tok_list[ptr]);++ptr;break;
|
default:error_token.push_back(tok_list[ptr]);++ptr;break;
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
|
@ -882,15 +884,7 @@ nasal_ast nasal_parse::for_loop()
|
||||||
else if(tok_list[ptr].type==tok_var)
|
else if(tok_list[ptr].type==tok_var)
|
||||||
node.add_child(definition());
|
node.add_child(definition());
|
||||||
else if(tok_list[ptr].type==tok_lcurve)
|
else if(tok_list[ptr].type==tok_lcurve)
|
||||||
node.add_child(
|
node.add_child(lcurve_expr());
|
||||||
check_multi_def()?
|
|
||||||
definition():
|
|
||||||
(
|
|
||||||
check_multi_scalar()?
|
|
||||||
multi_assgin():
|
|
||||||
calc()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
else
|
else
|
||||||
node.add_child(calc());
|
node.add_child(calc());
|
||||||
// check first semi
|
// check first semi
|
||||||
|
|
Loading…
Reference in New Issue