Пример #1
0
 public override string ToString()
 {
     if (IsAssignTo)
     {
         return(ValueExp.ToString() + "=>" + ToExp.ToString());
     }
     else
     {
         return(ToExp.ToString() + "=" + ValueExp.ToString());
     }
 }
Пример #2
0
        public override string ToCode()
        {
            string valueCode = ValueExp == null ? "" : ValueExp.ToCode();
            string toCode    = ToExp == null ? "" : ToExp.ToCode();

            if (IsAssignTo)
            {
                return(string.Format("{0}{1} => {2} ;", getStmtPrefix(), valueCode, toCode));
            }
            else
            {
                return(string.Format("{0}{1} = {2} ;", getStmtPrefix(), toCode, valueCode));
            }
        }
Пример #3
0
        public override void Interpret()
        {
            var from = FromExp.Interpret();
            var to   = ToExp.Interpret();

            TablaSimbolos.Instance.SetVariableValue(Id.Name, from);
            while (((IntValue)from).Value <= ((IntValue)to).Value)
            {
                foreach (var statementNode in StatementList)
                {
                    statementNode.Interpret();
                }
                ((IntValue)from).Value += 1;
                TablaSimbolos.Instance.SetVariableValue(Id.Name, from);
            }
        }
Пример #4
0
        protected override void AnalyBody()
        {
            ValueExp = AnalySubExp(ValueExp);
            ToExp    = AnalyToExp();
            if (ToExp is ExpBracketWrapOne)
            {
                ToExp = ((ExpBracketWrapOne)ToExp).VarExp;
            }

            if (ValueExp is ExpBracketWrapOne)
            {
                ValueExp = ((ExpBracketWrapOne)ValueExp).VarExp;
            }
            else if (ValueExp is ExpBracket)
            {
                ValueExp = ((ExpBracket)ValueExp).UnBracket();
            }

            if (ToExp is ExpDe || ToExp is ExpDi)
            {
                AnalyToExp_DeDi();
            }
            else if (ToExp is ExpVarBase)
            {
                //没有错误,不需要提示错误
            }
            else if (ToExp is ExpEachItem)
            {
                //没有错误,不需要提示错误
            }
            else if (ToExp is ExpUseEnumItem)
            {
                Errorf(this.ToExp.Position, "约定值'{0}'不能被赋值", ToExp.ToString());
            }
            else
            {
                Errorf(this.ToExp.Position, "该表达式不能被赋值");
            }
            this.RetType = ZLangBasicTypes.ZVOID;
            NewValueExp  = ValueExp;
            AnalyArgLambda();
        }
Пример #5
0
        public override void ValidSemantic()
        {
            var fromExpT = FromExp.EvaluateSemantic();
            var toExpT   = ToExp.EvaluateSemantic();

            if (!(fromExpT is IntTipo) || !(toExpT is IntTipo))
            {
                throw new SemanticException($"Expresion From y To deben ser tipo int, FromT: {fromExpT} ToT:{toExpT}");
            }
            var idT = Id.EvaluateSemantic();

            if (!(idT is IntTipo))
            {
                throw new SemanticException($"Id debe de ser de tipo Int, idT: {idT}");
            }
            foreach (var statementNode in StatementList)
            {
                statementNode.ValidSemantic();
            }
        }
Пример #6
0
 private void AnalyToExp_Other()
 {
     ToExp        = ToExp.Analy();
     AnalyCorrect = AnalyCorrect && ToExp.AnalyCorrect;
 }
Пример #7
0
 public override void SetParent(Exp parentExp)
 {
     ParentExp = parentExp;
     ToExp.SetParent(this);
     ValueExp.SetParent(this);
 }
Пример #8
0
        //private void AnalyToExp_Var()
        //{
        //    var varExp = ToExp as ExpLocalVar;
        //    if (!this.ProcContext.ContainsVarName(varExp.VarName))
        //    {
        //        varExp.SetAssigned(ValueExp.RetType);
        //        //varExp.SetContextExp(this.ExpContext);
        //        ToExp = AnalyDim(varExp);
        //        AnalyCorrect = AnalyCorrect && ValueExp.AnalyCorrect;
        //    }
        //    else
        //    {
        //        AnalyToExp_DeDi();
        //    }
        //}

        //private Exp AnalyDim(ExpLocalVar varExp)
        //{
        //    var VarName=varExp.VarName;
        //    ZCLocalVar localVarSymbol = new ZCLocalVar(VarName, ValueExp.RetType);
        //    varExp.LocalVarSymbol = localVarSymbol;
        //    this.ProcContext.AddLocalVar(localVarSymbol);
        //    Exp varExp2 = varExp.Analy();
        //    return varExp2;
        //}

        private void AnalyToExp_DeDi()
        {
            ToExp                = ToExp.Analy();
            AnalyCorrect         = AnalyCorrect && ToExp.AnalyCorrect;
            ValueExp.RequireType = ToExp.RetType;
        }