From 674983202e99ef7f71386b74755cb18db6302cd4 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Fri, 25 Oct 2019 17:39:56 +0800 Subject: [PATCH] Fixed bugs in and & or operator --- version1.2/nasal_parser.h | 109 +++++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 36 deletions(-) diff --git a/version1.2/nasal_parser.h b/version1.2/nasal_parser.h index c529934..a3df320 100644 --- a/version1.2/nasal_parser.h +++ b/version1.2/nasal_parser.h @@ -120,6 +120,8 @@ class nasal_parser abstract_syntax_tree loop_expr(); bool else_if_check(); abstract_syntax_tree if_else_expr(); + abstract_syntax_tree and_operator_expr(); + abstract_syntax_tree add_sub_cmp_operator_expr(); abstract_syntax_tree mul_div_operator_expr(); abstract_syntax_tree unary_operator_expr(); void check_semi_at_end(); @@ -1297,6 +1299,50 @@ abstract_syntax_tree nasal_parser::mul_div_operator_expr() } return node; } +abstract_syntax_tree nasal_parser::add_sub_cmp_operator_expr() +{ + abstract_syntax_tree node; + abstract_syntax_tree temp; + // number / string / identifier haven't been checked + get_token(); + if(this_token.type==__func)// only lambda (func (){...})() can use this condition + { + node=(function_generate_expr()); + return node; + } + else + parse.push(this_token); + node=mul_div_operator_expr(); + while(1) + { + get_token(); + switch(this_token.type) + { + case __cmp_equal: + case __cmp_not_equal: + case __cmp_less: + case __cmp_more: + case __cmp_less_or_equal: + case __cmp_more_or_equal: + case __add_operator: + case __sub_operator: + case __link_operator: + temp.set_clear(); + temp.set_node_type(this_token.type); + temp.add_child(node); + break; + case __semi:parse.push(this_token);return node;break; + case __unknown_operator: + ++error; + std::cout<<">>[Error] line "<>[Error] line "<