public ALittleScriptAllExprElement GetAllExpr() { if (m_flag_AllExpr) { return(m_cache_AllExpr); } m_flag_AllExpr = true; foreach (var child in m_childs) { if (child is ALittleScriptAllExprElement) { m_cache_AllExpr = child as ALittleScriptAllExprElement; break; } } return(m_cache_AllExpr); }
// 检查表达式是否有return public static ABnfGuessError CheckAllExpr(List <ABnfGuess> return_list, ALittleScriptAllExprElement all_expr, out bool result) { result = false; if (all_expr.GetIfExpr() != null) { var if_expr = all_expr.GetIfExpr(); var sub_all_expr = if_expr.GetAllExpr(); var if_body = if_expr.GetIfBody(); if (sub_all_expr != null) { var error = CheckAllExpr(return_list, sub_all_expr, out bool sub_result); if (error != null) { return(error); } if (!sub_result) { return(null); } } else if (if_body != null) { var error = CheckAllExprList(return_list, if_body.GetAllExprList(), out bool sub_result); if (error != null) { return(error); } if (!sub_result) { return(null); } } else { return(null); } var else_if_expr_list = if_expr.GetElseIfExprList(); foreach (var else_if_expr in else_if_expr_list) { sub_all_expr = else_if_expr.GetAllExpr(); var else_if_body = else_if_expr.GetElseIfBody(); if (sub_all_expr != null) { var error = CheckAllExpr(return_list, sub_all_expr, out bool sub_result); if (error != null) { return(error); } if (!sub_result) { return(null); } } else if (else_if_body != null) { var error = CheckAllExprList(return_list, else_if_body.GetAllExprList(), out bool sub_result); if (error != null) { return(error); } if (!sub_result) { return(null); } } else { return(null); } } var else_expr = if_expr.GetElseExpr(); if (else_expr == null) { return(null); } sub_all_expr = else_expr.GetAllExpr(); var else_body = else_expr.GetElseBody(); if (sub_all_expr != null) { return(CheckAllExpr(return_list, sub_all_expr, out result)); } else if (else_body != null) { return(CheckAllExprList(return_list, else_body.GetAllExprList(), out result)); } else { return(null); } } /* * if (all_expr.GetForExpr() != null) * { * var for_expr = all_expr.GetForExpr(); * var sub_all_expr = for_expr.GetAllExpr(); * var for_body = for_expr.GetForBody(); * if (sub_all_expr != null) * return CheckAllExpr(return_list, sub_all_expr, out result); * else if (for_body != null) * return CheckAllExprList(return_list, for_body.GetAllExprList(), out result); * else * return null; * } * * if (all_expr.GetWhileExpr() != null) * { * var while_expr = all_expr.GetWhileExpr(); * var sub_all_expr = while_expr.GetAllExpr(); * var while_body = while_expr.GetWhileBody(); * if (sub_all_expr != null) * return CheckAllExpr(return_list, sub_all_expr, out result); * else if (while_body != null) * return CheckAllExprList(return_list, while_body.GetAllExprList(), out result); * else * return null; * } */ if (all_expr.GetDoWhileExpr() != null) { var do_while_expr = all_expr.GetDoWhileExpr(); var do_while_body = do_while_expr.GetDoWhileBody(); if (do_while_body != null) { return(CheckAllExprList(return_list, do_while_body.GetAllExprList(), out result)); } else { return(null); } } if (all_expr.GetReturnExpr() != null) { result = true; // 这里检查return return(null); } if (all_expr.GetWrapExpr() != null) { var wrap_expr = all_expr.GetWrapExpr(); return(CheckAllExprList(return_list, wrap_expr.GetAllExprList(), out result)); } if (all_expr.GetThrowExpr() != null) { result = true; return(null); } return(null); }