示例#1
0
 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);
     }
 }
示例#2
0
        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));
        }
示例#3
0
        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);
     }
 }
示例#5
0
 private bool isNodeFunction(SemanticNode node)
 {
     return(node.getTokenType() == TokenType.INVOKE);
 }
示例#6
0
 private OperatorNode readOperatorNode(SemanticNode node)
 {
     return(new OperatorNode(node.getToken()));
 }
示例#7
0
 private bool isNodeOperator(SemanticNode node)
 {
     return(node.getTokenType() == TokenType.OPERATOR);
 }
示例#8
0
 private VariableNode readVariableNode(SemanticNode node)
 {
     return(new VariableNode());
 }
示例#9
0
 private bool isNodeVariable(SemanticNode node)
 {
     return(node.getTokenType() == TokenType.VARIABLE);
 }
示例#10
0
        private NumberNode readNumberNode(SemanticNode node)
        {
            double n = double.Parse(node.getSymbolValue());

            return(new NumberNode(n));
        }
示例#11
0
 private bool isNodeNumber(SemanticNode node)
 {
     return(node.getTokenType() == TokenType.NUMBER);
 }
示例#12
0
 public void analyze(Declaration declaration)
 {
     this.declaration = declaration;
     this.root        = analyze(syntaxTree.getRoot());
 }