Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #3
0
        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);
        }