public void TestSetup() { busOperator = new BOperator(); operator_testObject = new Operator(); #region Operator operatorTA.Insert(ADOPerson1.ID, true, ADOFlow1.ID, ""); operatorTA.Insert(ADOPerson3.ID, true, ADOFlow2.ID, ""); DatasetGatewayWorkFlow.TA_OperatorDataTable opTable = operatorTA.GetByPesonId(ADOPerson1.ID); ADOOperator1.ID = (opTable.Rows[0] as DatasetGatewayWorkFlow.TA_OperatorRow).opr_ID; opTable = operatorTA.GetByPesonId(ADOPerson3.ID); ADOOperator2.ID = (opTable.Rows[0] as DatasetGatewayWorkFlow.TA_OperatorRow).opr_ID; #endregion }
public static void F_Parser(ref WordType[] tt, ref int tt_i, ref MyArray[] a, ref int a_i, ref string parseresult, ref Dictionary <string, int> varmap, ref Dictionary <string, string> varmap2, ref Dictionary <string, MyArray> varmap3, int start_num, int end_num) { for (tt_i = start_num; tt_i < end_num && tt[tt_i] != null;) { if (tt[tt_i].Type.Equals("auto")) { try { Auto.M_Auto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotAVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } else if (tt[tt_i].Type.Equals("putnumb")) { try { Putnumb.Put_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotAVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } else if (tt[tt_i].Type.Equals("putchar")) { try { Putchar.Put_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } else if (tt[tt_i].Code.Equals("++") || tt[tt_i].Code.Equals("--")) { try { UnaryOperation.Unary_Operation(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } else if (tt[tt_i].Type.Equals("operator")) { try { BOperator.Operator(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (NotAVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } else if (tt[tt_i].Type.Equals("getchar")) { try { Getchar.Get_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } else { tt_i++; } } return; }
public static void Parser_ReNamed2(ref WordType[] tt, ref int tt_i, ref MyArray[] a, ref int a_i, ref string parseresult, ref Dictionary<string, int> varmap, ref Dictionary<string, string> varmap2, ref Dictionary<string, MyArray> varmap3, int start_num, int end_num, int eend_num) { try { for (tt_i = start_num; tt_i < end_num && tt[tt_i] != null; ) { // 读取到auto关键字,跳转到auto函数处理 if (tt[tt_i].Type.Equals("auto")) { Auto.M_Auto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putnumb关键字,跳转到putnumb函数,输出数值型变量值 else if (tt[tt_i].Type.Equals("putnumb")) { Putnumb.Put_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putchar关键字,跳转到putchar函数,输出字符型型变量值 else if (tt[tt_i].Type.Equals("putchar")) { Putchar.Put_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 单目运算,自增自减 else if (tt[tt_i].Code.Equals("++") || tt[tt_i].Code.Equals("--")) { UnaryOperation.Unary_Operation(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到类型为operator,即操作符类型,跳转到operator函数 else if (tt[tt_i].Type.Equals("operator")) { BOperator.Operator(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字getchar,跳转到getchar函数进行获取字符串输入操作 else if (tt[tt_i].Type.Equals("getchar")) { Getchar.Get_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字getnumb,跳转到getnumb函数进行获取数值输入操作 else if (tt[tt_i].Type.Equals("getnumb")) { Getnumb.Get_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到note关键字, 跳转到Note函数处理注释 else if (tt[tt_i].Type.Equals("note")) { Note.M_Note(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putstr函数,输出数组 else if (tt[tt_i].Type.Equals("putstr")) { Putstr.Put_str(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 都不满足就将tt_i下标加1,不作处理 else { tt_i++; } } } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotAVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } tt_i = eend_num; return; }
public static void M_Auto(ref WordType[] tt, ref int tt_i, ref MyArray[] a, ref int a_i, ref string parseresult, ref Dictionary <string, int> varmap, ref Dictionary <string, string> varmap2, ref Dictionary <string, MyArray> varmap3) { // 如果是要定义数组,判断是否为变量[数值]结构 if (tt[tt_i + 1].Type.Equals("var") && tt[tt_i + 2].Code.Equals("[") && tt[tt_i + 3].Type.Equals("number") && tt[tt_i + 4].Code.Equals("]")) { // 将B语言规定的数组长度保存为临时变量temp中 int temp = int.Parse(tt[tt_i + 3].Code); // 创建一个MyArray类保存该数组 a[a_i++] = new MyArray(tt[tt_i + 1].Code, temp); // 有以下标,至逗号或分号处 tt_i += 4; // 如果下一位是分号则返回出去 if (tt[tt_i + 1].Code.Equals(";")) { tt_i++; return; // 如果下一位是逗号,则递归 } else if (tt[tt_i + 1].Code.Equals(",")) { tt_i++; M_Auto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); // 若在他们之后不是逗号和分号,则报出语法错误并终止程序 } else { parseresult += "定义变量语句出错\r\n"; throw new WrongGrammarException("定义变量语句出错"); } // 如果下一位是变量,则放入变量栈中 } else if (tt[tt_i + 1].Type.Equals("var")) { // 同时放入数值型和字符串型变量map中 varmap[tt[tt_i + 1].Code] = 0; varmap2[tt[tt_i + 1].Code] = null; // 将下标右移至变量处 tt_i++; // 如果下下一位是分号,则下标加一并返回去 if ((tt[tt_i + 1].Code.Equals(";"))) { tt_i++; return; // 如果下一位是等号,则进行赋值处理后返回主函数 } else if ((tt[tt_i + 1].Code.Equals("="))) { tt_i++; try { BOperator.Operator(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } return; // 如果下一位是逗号,则递归 } else if (tt[tt_i + 1].Code.Equals(",")) { tt_i++; M_Auto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); // 如果不是上述情况,则出现语法错误,报错并终止程序 } else { parseresult += "定义变量语句出错\r\n"; throw new WrongGrammarException("定义变量语句出错"); } // 如果不是上述情况,则出现语法错误,报错并终止程序 } else { parseresult += "定义变量语句出错\r\n"; throw new WrongGrammarException("定义变量语句出错"); } }
private IList <RoleCustomCodeType> GetCurrentUserBusinessRole() { try { IList <RoleCustomCodeType> roles = new List <RoleCustomCodeType>(); if (!SessionHelper.HasSessionValue(SessionHelper.GTSCurrentUserManagmentState)) { bool isManager = new BManager().GetManager(personId).ID > 0 ? true : false; bool isSubstitute = new BSubstitute().GetSubstituteManager(personId) > 0 ? true : false; bool isOperator = new BOperator().IsOperator(); Dictionary <string, object> ManagementState = new Dictionary <string, object>(); if (isManager) { Role role = new BRole().GetRoleByCode(RoleCustomCodeType.Manager); if (role != null) { ManagementState.Add("ManagerRoleId", role.ID); } } if (isOperator) { Role role = new BRole().GetRoleByCode(RoleCustomCodeType.Operator); if (role != null) { ManagementState.Add("OperatorRoleId", role.ID); } } if (isSubstitute) { Role role = new BRole().GetRoleByCode(RoleCustomCodeType.Substitute); if (role != null) { ManagementState.Add("SubstituteRoleId", role.ID); } } ManagementState.Add("IsManager", isManager); ManagementState.Add("IsOperator", isOperator); ManagementState.Add("IsSubstitute", isSubstitute); SessionHelper.SaveSessionValue(SessionHelper.GTSCurrentUserManagmentState, ManagementState); } Dictionary <string, object> managementState = (Dictionary <string, object>)SessionHelper.GetSessionValue(SessionHelper.GTSCurrentUserManagmentState); if (Utility.ToBoolean(managementState["IsManager"])) { roles.Add(RoleCustomCodeType.Manager); } if (Utility.ToBoolean(managementState["IsOperator"])) { roles.Add(RoleCustomCodeType.Operator); } if (Utility.ToBoolean(managementState["IsSubstitute"])) { roles.Add(RoleCustomCodeType.Substitute); } return(roles); } catch (Exception ex) { BaseBusiness <GTS.Clock.Model.Entity> .LogException(ex); throw ex; } }
/// <summary> /// بررسی و مقداردهی اپراتور از روی شناسه کاربری /// </summary> /// <returns></returns> private bool InitOperator() { BOperator businessOperator = new BOperator(); return(businessOperator.IsOperator()); }
public static bool W_Check(ref WordType[] tt, ref int tt_i, ref MyArray[] a, ref int a_i, ref string parseresult, ref Dictionary <string, int> varmap, ref Dictionary <string, string> varmap2, ref Dictionary <string, MyArray> varmap3, ref int start, ref int end, ref int end_num) { // 将初始下标指向传过来的while语句判断条件开始的地方 tt_i = start; // 遍历 直到下标tt_i指向传过来的 while语句判断语句结尾标志 end for (; tt_i < end; tt_i++) { // 当读取到操作符时 跳转执行 operator函数 if (tt[tt_i].Type.Equals("operator")) { // 定义一个变量来存储返回类型 int temp = BOperator.Operator(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); // 如果变量temp是0 返回false 同时让下标tt_i指向while语句的结尾 // 如果变量temp是非0 返回 true if (temp == 0) { tt_i = end_num; return(false); } else { return(true); } // 当读取到类型是数字 并且下一位是右括号时 } else if (tt[tt_i].Type.Equals("number") && tt[tt_i + 1].Code.Equals(")")) { // 将对应的Code转换为int型赋值给temp int temp = int.Parse(tt[tt_i].Code); // 如果变量temp是0 返回false 同时让下标tt_i指向while语句的结尾 // 如果变量temp是非0 返回 true if (temp == 0) { tt_i = end_num; return(false); } else { return(true); } // 当读取到类型是变量 并且下一位是右括号时 } else if (tt[tt_i].Type.Equals("var") && tt[tt_i + 1].Code.Equals(")")) { // 如果变量map里存在该变量 进行下一步判断 if (varmap.ContainsKey(tt[tt_i].Code)) { // 将map里变量对应的值赋值给临时变量temp int temp; varmap.TryGetValue(tt[tt_i].Code, out temp); // 如果变量temp是0 返回false 同时让下标tt_i指向while语句的结尾 // 如果变量temp是非0 返回 true if (temp == 0) { tt_i = end_num; return(false); } else { return(true); } // 如果变量map里不存在该变量 抛出异常 } else { parseresult += "变量" + tt[tt_i].Code + "未定义\r\n"; throw new NotDefineVarException("变量未定义"); } } } return(true); }
// 遍历词法分析器序列,对于不同类型的关键字,跳转到特殊函数执行 public void BParser() { try { // 当词法分析器序列tt没有读尽,就继续处理 while (tt[tt_i] != null) { // 读取到auto关键字,跳转到auto函数处理 if (tt[tt_i].Type.Equals("auto")) { Auto.M_Auto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putnumb关键字,跳转到putnumb函数,输出数值型变量值 else if (tt[tt_i].Type.Equals("putnumb")) { Putnumb.Put_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putchar关键字,跳转到putchar函数,输出字符型型变量值 else if (tt[tt_i].Type.Equals("putchar")) { Putchar.Put_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 单目运算,自增自减 else if (tt[tt_i].Code.Equals("++") || tt[tt_i].Code.Equals("--")) { UnaryOperation.Unary_Operation(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到类型为operator,即操作符类型,跳转到operator函数 else if (tt[tt_i].Type.Equals("operator")) { BOperator.Operator(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字getchar,跳转到getchar函数进行读入字符串操作 else if (tt[tt_i].Type.Equals("getchar")) { Getchar.Get_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字getnumb,跳转到getnumb函数执行读入数值操作 else if (tt[tt_i].Type.Equals("getnumb")) { Getnumb.Get_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字goto,跳转到Bgoto函数处理goto语句 else if (tt[tt_i].Type.Equals("goto")) { Bgoto.B_goto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap); } // 读取到if关键字,跳转到Bif函数处理if语句 else if (tt[tt_i].Type.Equals("if")) { Bif.B_if(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap, ref while_or); } // 读取到while关键字, 跳转到BWhile函数处理while循环语句 else if (tt[tt_i].Type.Equals("while")) { BWhile.B_While(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap, ref while_or); } // 读取到do关键字,跳转到BDo_while函数执行do while函数执行 else if (tt[tt_i].Type.Equals("do")) { BDoWhile.B_Dowhile(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap, ref while_or); } // 读取到for关键字,执行for循环 else if (tt[tt_i].Type.Equals("for")) { Bfor.B_for(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到note关键字, 跳转到Note函数处理注释 else if (tt[tt_i].Type.Equals("note")) { Note.M_Note(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putstr函数,输出数组 else if (tt[tt_i].Type.Equals("putstr")) { Putstr.Put_str(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到switch else if (tt[tt_i].Type.Equals("switch")) { Bswitch.B_switch(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap, ref while_or); } // 都不满足就将tt_i下标加1,不作处理 else { tt_i++; } } } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotAVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotFoundMarkException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } }
public static void Parser_ReNamed1(ref WordType[] tt, ref int tt_i, ref MyArray[] a, ref int a_i, ref string parseresult, ref Dictionary <string, int> varmap, ref Dictionary <string, string> varmap2, ref Dictionary <string, MyArray> varmap3, ref Dictionary <string, int> markmap, int start_num, int end_num, ref bool while_or) { try { for (tt_i = start_num; tt_i < end_num && tt[tt_i] != null;) { // 遇到break,跳出本次parser执行 if (while_or == false) { return; } // 读取到auto关键字,跳转到auto函数处理 if (tt[tt_i].Type.Equals("auto")) { Auto.M_Auto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putnumb关键字,跳转到putnumb函数,输出数值型变量值 else if (tt[tt_i].Type.Equals("putnumb")) { Putnumb.Put_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putchar关键字,跳转到putchar函数,输出字符型型变量值 else if (tt[tt_i].Type.Equals("putchar")) { Putchar.Put_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到类型为++ --,即自增自减,跳转到unaryOperation函数 else if (tt[tt_i].Code.Equals("++") || tt[tt_i].Code.Equals("--")) { UnaryOperation.Unary_Operation(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到类型为operator,即操作符类型,跳转到operator函数 else if (tt[tt_i].Type.Equals("operator")) { BOperator.Operator(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字getchar,跳转到getchar函数进行获取字符串输入操作 else if (tt[tt_i].Type.Equals("getchar")) { Getchar.Get_char(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到关键字getnumb,跳转到getnumb函数进行获取数值输入操作 else if (tt[tt_i].Type.Equals("getnumb")) { Getnumb.Get_numb(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到if关键字,跳转到if函数,执行if语句 else if (tt[tt_i].Type.Equals("if")) { Bif.B_if(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap, ref while_or); } // 读取到if关键字,跳转到if函数,执行if语句 else if (tt[tt_i].Type.Equals("goto")) { Bgoto.B_goto(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3, ref markmap); } // 读取到note关键字, 跳转到Note函数处理注释 else if (tt[tt_i].Type.Equals("note")) { Note.M_Note(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到putstr函数,输出数组 else if (tt[tt_i].Type.Equals("putstr")) { Putstr.Put_str(ref tt, ref tt_i, ref a, ref a_i, ref parseresult, ref varmap, ref varmap2, ref varmap3); } // 读取到break关键字 else if (tt[tt_i].Type.Equals("break")) { Console.WriteLine("break开始运行"); Break.MBreak(ref while_or, ref tt_i); } // 读取到continue else if (tt[tt_i].Type.Equals("continue")) { return; } // 都不满足就将tt_i下标加1,不作处理 else { tt_i++; } } } catch (NotDefineVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotAVarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (WrongGrammarException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } catch (NotFoundMarkException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } tt_i = end_num + 2; return; }