public override string ToString() { if (IsAssignTo) { return(ValueExp.ToString() + "=>" + ToExp.ToString()); } else { return(ToExp.ToString() + "=" + ValueExp.ToString()); } }
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)); } }
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); } }
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(); }
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(); } }
private void AnalyToExp_Other() { ToExp = ToExp.Analy(); AnalyCorrect = AnalyCorrect && ToExp.AnalyCorrect; }
public override void SetParent(Exp parentExp) { ParentExp = parentExp; ToExp.SetParent(this); ValueExp.SetParent(this); }
//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; }