private EvaluationNode build(SemanticNode node) { if (node == null) { return(null); } else if (isNodeVariable(node)) { return(readVariableNode(node)); } else if (isNodeNumber(node)) { return(readNumberNode(node)); } else if (isNodeFunction(node)) { return(readFunctionNode(node)); } else { EvaluationNode newRoot = new OperatorNode(node.getToken()); newRoot.left = build(node.left); newRoot.right = build(node.right); return(newRoot); } }
private FunctionNode readFunctionNode(SemanticNode node) { Function function = getFunction(node.left); EvaluationNode parameterRoot = build(node.right); EvaluationTree evaluationTree = new EvaluationTree(parameterRoot); return(new FunctionNode(function, evaluationTree)); }
private Function getFunction(SemanticNode node) { string functionName = node.getSymbolValue(); if (Calculator.currentNameSpace.hasFunction(functionName)) { return(Calculator.currentNameSpace.getFunction(functionName)); } else if (Calculator.globalNameSpace.hasFunction(functionName)) { return(Calculator.globalNameSpace.getFunction(functionName)); } else { throw new Exception(); } }
private SemanticNode analyze(SyntaxNode node) { if (node == null) { return(null); } else if (node.getTokenType() == TokenType.VARIABLE) { return(evaluateVariableNode(node)); } else { SemanticNode newRoot = new SemanticNode(node.getToken()); newRoot.left = analyze(node.left); newRoot.right = analyze(node.right); return(newRoot); } }
private bool isNodeFunction(SemanticNode node) { return(node.getTokenType() == TokenType.INVOKE); }
private OperatorNode readOperatorNode(SemanticNode node) { return(new OperatorNode(node.getToken())); }
private bool isNodeOperator(SemanticNode node) { return(node.getTokenType() == TokenType.OPERATOR); }
private VariableNode readVariableNode(SemanticNode node) { return(new VariableNode()); }
private bool isNodeVariable(SemanticNode node) { return(node.getTokenType() == TokenType.VARIABLE); }
private NumberNode readNumberNode(SemanticNode node) { double n = double.Parse(node.getSymbolValue()); return(new NumberNode(n)); }
private bool isNodeNumber(SemanticNode node) { return(node.getTokenType() == TokenType.NUMBER); }
public void analyze(Declaration declaration) { this.declaration = declaration; this.root = analyze(syntaxTree.getRoot()); }