/// <summary> /// 判断是否为入栈边界, 如果是则返回弹栈字符. /// </summary> /// <param name="elem"></param> /// <returns>返回</returns> public static List<SyntaxStock> GetStockChar(ErlangElement elem) { List<SyntaxStock> ret = null; string str = elem.Context; if (FsmCheck.StockChar.ContainsKey(str)) { ret = FsmCheck.StockChar[str]; } return ret; }
/// <summary> /// 语法树 /// </summary> private void ShowDom(ErlangElement root, TreeNode rnode) { TreeNode c = null; if (FsmCheck.RegexGroups.ContainsKey(root.GroupName)) { c = new TreeNode( "[" + root.GroupName + ":" + root.Line + ", " + root.Index + "]:" + root.Context ); c.Tag = root; c.ForeColor = FsmCheck.RegexGroups[root.GroupName]; rnode.Nodes.Add(c); } if (root.Elements != null) { foreach (ErlangElement ch in root.Elements) { ShowDom(ch, c); } } }
/// <summary> /// 根据匹配内容, 得到erlang元素 /// </summary> /// <param name="m"></param> /// <returns></returns> private ErlangElement GetElemByMatch(Match m) { ErlangElement elem = null; foreach (string gs in FsmCheck.RegexGroups.Keys) { //判断所在分组 if (m.Groups[gs].Success) { elem = new ErlangElement(); elem.Index = m.Groups[gs].Index; elem.GroupName = gs; elem.Context = m.Value.Replace(FsmCheck.repalce_char, FsmCheck.remean_char); elem.Line = GetLineNo(elem.Index); break; } } return elem; }