Пример #1
0
        public override Exp Analy( )
        {
            LeftExp = AnalySubExp(LeftExp);
            //bool rightOK = false;
            if (RightExp is ExpEachWord)
            {
                var eachItemExp = AnalyEach();
                Exp newExp      = eachItemExp.Analy();
                return(newExp);
            }
            else
            {
                ParseRightPropertyName();
            }
            if (!this.AnalyCorrect)
            {
                return(this);
            }
            //if (!rightOK) return this;
            //if (!LeftExp.AnalyResult) return this;

            if (LeftExp.RetType is ZEnumType)
            {
                ErrorE(RightExp.Postion, "约定没有属性");
            }
            else if (LeftExp.RetType is ZClassType)
            {
                ZClassType zclass = LeftExp.RetType as ZClassType;
                ZMember = zclass.SearchZMember(propertyName);
                if (ZMember == null)
                {
                    ErrorE(LeftExp.Postion, "不存在'{0}'属性", propertyName);
                }
                else
                {
                    RetType = ZMember.MemberZType;
                }
            }
            else
            {
                throw new CompileException();
            }
            return(this);
        }
Пример #2
0
 public void Run(ProjectCompileResult result)
 {
     if (result.CompiledTypes.Count > 0)
     {
         foreach (var item in result.CompiledTypes)
         {
             if (item is ZClassType)
             {
                 ZClassType zclass = item as ZClassType;
                 Type       type   = zclass.SharpType;
                 using (TurtleForm turtleForm = ReflectionUtil.NewInstance(type) as TurtleForm)
                 {
                     turtleForm.Run();
                 }
                 return;
             }
         }
     }
 }
Пример #3
0
        public void AnalyNameItem(Token nameToken)
        {
            ContextUse useContext = this.FileContext.UseContext;
            string     typeName   = nameToken.GetText();

            if (useContext.ContainsType(typeName))
            {
                this.FileContext.Errorf(nameToken.Position, "'{0}'已经被使用", typeName);
            }
            else
            {
                IZDescType[] ztypes   = this.FileContext.ImportContext.ImportPackageDescList.SearchZDescType(typeName);
                IZDescType   descType = ztypes[0];
                if (descType is ZClassType)
                {
                    ZClassType zclass = descType as ZClassType;
                    if (zclass.IsStatic)
                    {
                        useContext.UseZClassList.Add(zclass);
                    }
                    else
                    {
                        this.FileContext.Errorf(nameToken.Position, "'{0}'不是唯一类型,不能被简略使用", typeName);
                    }
                }
                else if (descType is ZEnumType)
                {
                    ZEnumType zenum = descType as ZEnumType;
                    useContext.UseZEnumList.Add(zenum);
                }
                else if (descType is ZDimType)
                {
                    ZDimType zdim = descType as ZDimType;
                    useContext.UseZDimList.Add(zdim);
                }
                else
                {
                    throw new CompileException();
                }
            }
        }
Пример #4
0
 public override Exp Analy( )
 {
     if (SubjectExp.RetType is ZEnumType)
     {
         ErrorE(this.Postion, "约定类型没有过程");
     }
     else
     {
         SubjectZType = (SubjectExp.RetType as ZClassType);
         CallZMethod  = SubjectZType.SearchZMethod(ExpProcDesc);
         if (CallZMethod == null)
         {
             ErrorE(this.Postion, "没有找到对应的过程");
         }
         else
         {
             this.RetType = CallZMethod.RetZType;
         }
     }
     return(this);
 }
Пример #5
0
 public SuperSymbolTable(string name, ZClassType zclass, ISymbolTable parentTable)
 {
     TableName   = name;
     classType   = zclass;
     ParentTable = parentTable;
 }
Пример #6
0
 public SuperSymbolTable(string name, ZClassType zclass)
 {
     TableName = name;
     classType = zclass;
 }