Example #1
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);
        }