public override IEnumerable <SymbolLValue> GetLValues(ILanguageOperator langOperator) { var structureConstructor = langOperator as GMacStructureConstructor; if (structureConstructor != null) { var structureCons = structureConstructor; if (structureCons.HasDefaultValueSource) { return(GetLValues(structureCons.DefaultValueSource)); } } else { var multivectorConstructor = langOperator as GMacFrameMultivectorConstructor; if (multivectorConstructor == null) { return(Enumerable.Empty <SymbolLValue>()); } var mvTypeCons = multivectorConstructor; if (mvTypeCons.HasDefaultValueSource) { return(GetLValues(mvTypeCons.DefaultValueSource)); } } return(Enumerable.Empty <SymbolLValue>()); }
public ILanguageExpressionBasic Generate_TypeCast(ILanguageType targetType, ILanguageOperator castOp, ILanguageExpression expr) { SetOperands(expr); VerifyOperation_TypeCast(targetType); return(BasicUnary.CreateTypeCast(targetType, castOp, _atomicOperand1)); }
public override ILanguageOperator ReplaceLValueByExpression(ILanguageOperator oldLangOperator, SymbolLValue oldLvalue, ILanguageExpressionAtomic newExpr) { var structureConstructor = oldLangOperator as GMacStructureConstructor; if (structureConstructor != null) { var structureCons = structureConstructor; if (structureCons.HasDefaultValueSource) { structureCons.SetDefaultValueSource( ReplaceLValueByExpression(structureCons.DefaultValueSource, oldLvalue, newExpr) ); } return(oldLangOperator); } var multivectorConstructor = oldLangOperator as GMacFrameMultivectorConstructor; if (multivectorConstructor == null) { return(oldLangOperator); } var mvTypeCons = multivectorConstructor; if (mvTypeCons.HasDefaultValueSource) { mvTypeCons.SetDefaultValueSource( ReplaceLValueByExpression(mvTypeCons.DefaultValueSource, oldLvalue, newExpr) ); } return(oldLangOperator); }
/// <summary> /// Extract a list of all l-values from the given language operator /// </summary> /// <param name="langOperator"></param> /// <returns></returns> public abstract IEnumerable <SymbolLValue> GetLValues(ILanguageOperator langOperator);
/// <summary> /// Replace the occurances of the given l-value inside the given language operator with the given atomic expression /// </summary> /// <param name="oldLangOperator"></param> /// <param name="oldLvalue"></param> /// <param name="newExpr"></param> /// <returns></returns> public abstract ILanguageOperator ReplaceLValueByExpression(ILanguageOperator oldLangOperator, SymbolLValue oldLvalue, ILanguageExpressionAtomic newExpr);
public static BasicBinary Create(ILanguageType exprType, ILanguageOperator langOp, ILanguageExpressionAtomic operand1, ILanguageExpressionAtomic operand2) { return(new BasicBinary(exprType, langOp, operand1, operand2)); }
private BasicBinary(ILanguageType exprType, ILanguageOperator langOp, ILanguageExpressionAtomic operand1, ILanguageExpressionAtomic operand2) : base(exprType, langOp) { Operand1 = operand1; Operand2 = operand2; }
public static BasicPolyadic Create(ILanguageType exprType, ILanguageOperator langOp, PolyadicOperands operands) { return(new BasicPolyadic(exprType, langOp, operands)); }
private BasicPolyadic(ILanguageType exprType, ILanguageOperator langOp, PolyadicOperands operands) : base(exprType, langOp) { _operands = operands; }
private BasicPolyadic(ILanguageType exprType, ILanguageOperator langOp) : base(exprType, langOp) { }
public static BasicUnary CreateTypeCast(ILanguageType exprType, ILanguageOperator langOp, ILanguageExpressionAtomic operand) { return(new BasicUnary(exprType, langOp, operand)); }
public static BasicUnary CreatePrimitive(ILanguageType exprType, string opName, ILanguageExpressionAtomic operand) { ILanguageOperator langOp = exprType.RootAst.OperatorPrimitiveDictionary[opName]; return(new BasicUnary(exprType, langOp, operand)); }
private BasicUnary(ILanguageType exprType, ILanguageOperator langOp, ILanguageExpressionAtomic operand) : base(exprType, langOp) { Operand = operand; }
protected LanguageExpressionBasic(ILanguageType exprType, ILanguageOperator langOperator) { ExpressionType = exprType; Operator = langOperator; }