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); }
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; } } } }
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(); } } }
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); }
public SuperSymbolTable(string name, ZClassType zclass, ISymbolTable parentTable) { TableName = name; classType = zclass; ParentTable = parentTable; }
public SuperSymbolTable(string name, ZClassType zclass) { TableName = name; classType = zclass; }