public TKTClassModel ShowClass(FileInfo fi) { string code = File.ReadAllText(fi.FullName); var tokens = scanner.Scan(code); TKTClassModel tktclass = parser.Parse(tokens); if (tktclass.NameModel == null) { tktclass.NameModel = new TKTContentModel() { Content = Path.GetFileName(fi.FullName) }; } ShowClass(tktclass); return(tktclass); }
public void ShowClass(TKTClassModel tktclass) { this.procTreeView.Nodes.Clear(); if (tktclass == null) { return; } TreeNode nameNode = new TreeNode(); nameNode.Text = tktclass.NameModel.Content + " "; nameNode.NodeFont = TipFont; nameNode.ForeColor = Color.BlueViolet; nameNode.Tag = tktclass.NameModel; procTreeView.Nodes.Add(nameNode); TreeNode baseNode = new TreeNode(); InitTipNode(baseNode, "属于"); //baseNode.Text ="属于:"+ tktclass.BaseType; nameNode.Nodes.Add(baseNode); TreeNode baseNameNode = new TreeNode(); baseNameNode.Text = tktclass.BaseType.Content; baseNode.Nodes.Add(baseNameNode); /*-------------- 导入 ---------------*/ TreeNode importNode = new TreeNode(); InitTipNode(importNode, "导入"); nameNode.Nodes.Add(importNode); TreeNode importPackageNode = new TreeNode(); InitTipNode(importPackageNode, "使用包"); importPackageNode.NodeFont = TipFont2; importNode.Nodes.Add(importPackageNode); foreach (TKTContentModel pp in tktclass.UsingPackages) { TreeNode pnode = new TreeNode(); pnode.Text = pp.Content; pnode.Tag = pp; importPackageNode.Nodes.Add(pnode); } /* * TreeNode importTypeNode = new TreeNode(); * InitTipNode(importTypeNode, "使用类型"); * importTypeNode.NodeFont = TipFont2; * importNode.Nodes.Add(importTypeNode); * * foreach (TKTContentModel pp in tktclass.UsingTypes) * { * TreeNode pnode = new TreeNode(); * pnode.Text = pp.Content; * pnode.Tag = pp; * importTypeNode.Nodes.Add(pnode); * }*/ TreeNode importRedirectNode = new TreeNode(); InitTipNode(importRedirectNode, "简略使用"); importRedirectNode.NodeFont = TipFont2; importNode.Nodes.Add(importRedirectNode); foreach (TKTContentModel pp in tktclass.RedirectTypes) { TreeNode pnode = new TreeNode(); pnode.Text = pp.Content; pnode.Tag = pp; importRedirectNode.Nodes.Add(pnode); } if (tktclass.BaseType.Content == "约定类型") { TreeNode enumNode = new TreeNode(); InitTipNode(enumNode, "约定"); nameNode.Nodes.Add(enumNode); foreach (var ei in tktclass.EnumItems) { TreeNode pnode = new TreeNode(); pnode.Text = ei.Content; pnode.Tag = ei; enumNode.Nodes.Add(pnode); } } else { /*--------------------- 属性 ------------------------*/ TreeNode propertyNode = new TreeNode(); InitTipNode(propertyNode, "属性"); nameNode.Nodes.Add(propertyNode); foreach (TKTPropertyModel pp in tktclass.PropertyList) { TreeNode pnode = new TreeNode(); pnode.Text = pp.ToString(); pnode.Tag = pp; propertyNode.Nodes.Add(pnode); } /*------------------------ 构造函数 ---------------------------*/ TreeNode constractNode = new TreeNode(); InitTipNode(constractNode, "创建过程"); nameNode.Nodes.Add(constractNode); foreach (TKTConstructionModel tc in tktclass.ContructList) { TreeNode pnode = new TreeNode(); pnode.Text = tc.ToString(); pnode.Tag = tc; constractNode.Nodes.Add(pnode); } /*------------------------ 过程 ---------------------------*/ TreeNode procNode = new TreeNode(); InitTipNode(procNode, "过程"); nameNode.Nodes.Add(procNode); foreach (TKTProcModel tp in tktclass.ProcList) { TreeNode pnode = new TreeNode(); pnode.Text = tp.ToString(); pnode.Tag = tp; procNode.Nodes.Add(pnode); } } this.procTreeView.ExpandAll(); importNode.Collapse(); }
public TKTClassModel Parse(List <Token> tokens) { this.srcTokens = tokens; tktclass = new TKTClassModel(); this.srcTokens.Add(Token.EOF); this.srcTokens.Add(Token.EOF); this.srcTokens.Add(Token.EOF); this.index = 0; while (CurrentToken.Kind != TokenKind.EOF) { /*while (CurrentToken.IsKeyIdent("使用包","使用类型","简略使用")&& NextToken.Kind == TokenKind.Colon) * { * ParseImport(); * }*/ if (CurrentToken.IsKeyIdent("使用包") && NextToken.Kind == TokenKind.Colon) { ParseImport(); } if (CurrentToken.IsKeyIdent("简略使用") && NextToken.Kind == TokenKind.Colon) { ParseSimpleUse(); } if (CurrentToken.IsKeyIdent("属于") && NextToken.Kind == TokenKind.Colon) { parseExtends(); } else if (CurrentToken.IsKeyIdent("名称") && NextToken.Kind == TokenKind.Colon) { parseName(); } else if (CurrentKind == TokenKind.Ident && CurrentText == "过程" && NextToken.Kind == TokenKind.Colon) { var ast = ParseMethod(); string typeName = tktclass.GetTypeName(); if (ast.IsContruct()) { tktclass.ContructList.Add(ast.ToContruct()); } else if (!string.IsNullOrEmpty(typeName) && ast.IsContruct(typeName)) { tktclass.ContructList.Add(ast.ToContruct()); } else { tktclass.ProcList.Add(ast); } //tktclass. //prog.Add(ast); } else if (CurrentKind == TokenKind.Ident && CurrentText == "属性" && NextToken.Kind == TokenKind.Colon) { parsePropertyPart(); } else if (CurrentToken.IsKeyIdent("约定") && NextToken.Kind == TokenKind.Colon) { parseAgreement(); } else { //error("无法识别'"+CurrentToken.GetText()+"'"); MoveNext(); } } return(tktclass); }