private void SetNumericalExpression(IdentifierValueNode identifierValueNode, ExpressionNode expressionNode, SymbolType expressionType) { switch (expressionType) { case SymbolType.Float: { FloatValueNode floatValueNode = new FloatValueNode(); ExpressionEvaluator <float> expressionEvaluator = new ExpressionEvaluator <float>(new FloatCalculator(expressionNode.Token)); expressionNode.Accept(expressionEvaluator); floatValueNode.Value = expressionEvaluator.Result; identifierValueNode.ValueNode = floatValueNode; break; } case SymbolType.Integer: { IntValueNode intValueNode = new IntValueNode(); ExpressionEvaluator <int> expressionEvaluator = new ExpressionEvaluator <int>(new IntCalculator(expressionNode.Token)); expressionNode.Accept(expressionEvaluator); intValueNode.Value = expressionEvaluator.Result; identifierValueNode.ValueNode = intValueNode; break; } } }
IEnumerable <ExpressionNode> Extract(ExpressionNode root) { var visitor = new SideEffectExtractorVisitor(); root.Accept(visitor); return(visitor.Trees); }
private ExpressionNode ProcessSingleNode(ExpressionNode node, ref SubExpressionGraph sub_graph) { var node_graph = node.Accept(this); if (node_graph.ContainsExtracted) { sub_graph = SubExpressionGraph.ConcatSubGraph(sub_graph, node_graph); } return(GetUpdatedExpressionNodeValue(node, node_graph)); }
public SymbolType GetType(ExpressionNode expression) { if (expression == null) { return(SymbolType.Null); } expression.Accept(this); return(typeHandler.CurrentType); }
public override Node Visit(ExpressionNode expression) { if (expression.IsBinary) { return(EvaluateBinaryExpression(expression.ChildNodes[0], expression.ChildNodes[1], expression.Operator, expression.Token)); } else if (expression.IsUnary) { return(EvaluateUnaryExpression(expression.ChildNodes[0], expression.Operator, expression.Token)); } return(expression.Accept(this)); }