This commit is contained in:
Valk Richard Li 2020-10-24 12:16:55 +08:00
parent 6daae85740
commit 67ae3505fb
3 changed files with 10 additions and 4 deletions

View File

@ -59,11 +59,11 @@ multive_expr::=
(unary|scalar) ('*' | '/') (unary|scalar) (unary|scalar) ('*' | '/') (unary|scalar)
; ;
unary::= unary::=
('-'|'!') scalar ('-'|'!') (unary|scalar)
; ;
scalar::= scalar::=
function {call_scalar} function {call_scalar}
|identifier {call_scalar} |[func] identifier {call_scalar}
|vector {call_scalar} |vector {call_scalar}
|hash {call_scalar} |hash {call_scalar}
|number |number

View File

@ -140,7 +140,7 @@ enum parse_error
void error_info(int line,int error_type,std::string error_str="") void error_info(int line,int error_type,std::string error_str="")
{ {
std::string detail; std::string detail;
std::cout<<">> [parse] error_info: [line "<<line<<"] "; std::cout<<">> [parse] error: [line "<<line<<"] ";
switch(error_type) switch(error_type)
{ {
case unknown: std::cout<<"unknown error.\n"; break; case unknown: std::cout<<"unknown error.\n"; break;

View File

@ -834,7 +834,13 @@ nasal_ast nasal_parse::unary()
case tok_not:node.set_type(ast_unary_not);break; case tok_not:node.set_type(ast_unary_not);break;
} }
++ptr; ++ptr;
if(ptr<tok_list_size) node.add_child(scalar()); if(ptr<tok_list_size)
{
if(tok_list[ptr].type==tok_sub || tok_list[ptr].type==tok_not)
node.add_child(unary());
else
node.add_child(scalar());
}
else{ ++error; error_info(error_line,lack_calculation);} else{ ++error; error_info(error_line,lack_calculation);}
return node; return node;
} }