コード例 #1
0
ファイル: ExpCall_Parsed.cs プロジェクト: pyzh/ZLanguage3
 private void AnalyProcDesc()
 {
     CallDesc = new ZMethodCall();
     ArgExps  = new List <Exp>();
     foreach (var item in this.Elements)
     {
         //if (this.Elements[0].ToString().StartsWith("战场参数的绘图器"))
         //{
         //    Console.WriteLine(this.ToString());
         //}
         if (item is ExpProcNamePart)
         {
             ExpProcNamePart namePartExp = item as ExpProcNamePart;
             CallDesc.Add(namePartExp.PartName);
         }
         else if (item is ExpBracket)
         {
             ExpBracket   bracketExp   = item as ExpBracket;
             ZBracketCall zbracketDesc = bracketExp.GetCallDesc();
             CallDesc.Add(zbracketDesc);
             ArgExps.AddRange(bracketExp.GetSubExps());
         }
         else
         {
             throw new CCException();
         }
     }
 }
コード例 #2
0
ファイル: ExpCall_Parsed.cs プロジェクト: pyzh/ZLanguage3
        private Exp SearchSubject( )
        {
            Exp SubjectExp = Elements[0];

            if (SubjectExp is ExpProcNamePart)
            {
                return(null);
            }
            else if (SubjectExp is ExpNameValue)
            {
                return(null);
            }
            else
            {
                while (SubjectExp is ExpBracket)
                {
                    ExpBracket expBracket = SubjectExp as ExpBracket;
                    if (expBracket.Count == 1)
                    {
                        SubjectExp = expBracket.GetSubExps()[0];
                    }
                    else
                    {
                        throw new CCException();
                    }
                }
                ZMethodCall    tailDesc       = CallDesc.CreateTail();
                List <Exp>     argExps        = ListHelper.GetSubs <Exp>(ArgExps, 1);
                ExpCallSubject expCallSubject = new ExpCallSubject(this.ExpContext, SubjectExp, tailDesc, this.SrcExp, argExps);
                return(expCallSubject);
            }
        }
コード例 #3
0
ファイル: ExpNew.cs プロジェクト: xonoer/ZCompileCore2
        public override Exp Analy( )
        {
            TypeExp    = AnalySubExp(TypeExp) as ExpType;       //TypeExp = ArgExp.Analy();
            BracketExp = AnalySubExp(BracketExp) as ExpBracket; //BracketExp.Analy();
            if (!AnalyCorrect)
            {
                return(this);
            }

            //Type subjectType = TypeExp.RetType.SharpType;
            if (IsList())
            {
                ExpNewList newListExp = new ExpNewList(this.ExpContext, TypeExp, BracketExp);
                //newListExp.SetContext(this.ExpContext);
                return(newListExp.Analy());
            }
            else
            {
                var args = BracketExp.GetCallNormalArgs();
                //ZMethodArgCollection argCollection = new ZMethodArgCollection(args);
                newDesc      = new ZNewDesc(args);
                ZConstructor = (TypeExp.RetType as ZClassType).FindDeclaredZConstructor(newDesc);
                if (ZConstructor == null)
                {
                    ErrorE(BracketExp.Postion, "没有正确的创建过程");
                }
                else
                {
                    RetType = TypeExp.RetType;
                }
            }
            return(this);
        }
コード例 #4
0
ファイル: ExpCall.cs プロジェクト: xonoer/ZCompileCore2
 private void AnalyProcDesc()
 {
     ExpProcDesc = new ZCallDesc();
     for (int i = 0; i < this.Elements.Count; i++)
     {
         Exp exp = this.Elements[i];
         exp.SetContext(this.ExpContext);
         Exp subExp = exp.Analy();
         Elements[i] = subExp;
         if (subExp != null)
         {
             if (subExp is ExpProcNamePart)
             {
                 ExpProcDesc.Add((subExp as ExpProcNamePart).PartName);
             }
             else if (subExp is ExpBracket)
             {
                 ExpProcDesc.Add((subExp as ExpBracket).GetDimArgs().ToArray());
             }
             else
             {
                 ExpBracket bracket = new ExpBracket();
                 bracket.AddInnerExp(subExp);
                 ExpProcDesc.Add(bracket.GetDimArgs().ToArray());
             }
         }
     }
 }
コード例 #5
0
ファイル: ExpNew.cs プロジェクト: pyzh/ZLanguage3
        public override Exp Analy( )
        {
            if (this.IsAnalyed)
            {
                return(this);
            }
            TypeExp    = (ExpTypeBase)(AnalySubExp(TypeExp));
            BracketExp = AnalySubExp(BracketExp) as ExpBracket;
            if (!AnalyCorrect)
            {
                return(this);
            }

            if (ZTypeUtil.IsListClass(TypeExp.RetType))
            {
                ExpNewList newListExp = new ExpNewList(this.ExpContext, TypeExp, BracketExp);
                IsAnalyed = true;
                return(newListExp.Analy());
            }
            else
            {
                return(AnalyNewExpOrQiangDiao());
            }
        }
コード例 #6
0
ファイル: ExpNew.cs プロジェクト: pyzh/ZLanguage3
 private void InitExpNew(ExpTypeBase typeExp, ExpBracket bracketExp)
 {
     TypeExp    = typeExp;
     BracketExp = bracketExp;
 }
コード例 #7
0
ファイル: ExpNew.cs プロジェクト: pyzh/ZLanguage3
 public ExpNew(ContextExp expContext, ExpTypeBase typeExp, ExpBracket bracketExp)
     : base(expContext)
 {
     InitExpNew(typeExp, bracketExp);
 }
コード例 #8
0
 public ExpNewList(ContextExp context, ExpType typeExp, ExpBracket argExp)
 {
     this.ExpContext = context;
     TypeExp         = typeExp;
     ArgExp          = argExp;
 }
コード例 #9
0
ファイル: ExpNewList.cs プロジェクト: pyzh/ZLanguage3
 public ExpNewList(ContextExp context, ExpTypeBase typeExp, ExpBracket argExp) : base(context)
 {
     TypeExp = typeExp;
     ArgExp  = argExp;
 }