public void Analyze_AmbiguousPredefinedFunction_ReturnsFunctionNode() { IdentifierNode left = new IdentifierNode("sin"); SyntaxNode right = new NumberNode(1); SyntaxNode root = new FunctionOrDistributionNode(left, right); root = SemanticAnalyzer.Analyze(root, new Environment()); Assert.AreEqual("sin(1)", root.ToString()); }
public void Analyze_AmbigiousSymbolDistribution_ReturnsOperatorNode() { IdentifierNode left = new IdentifierNode("x"); SyntaxNode right = new NumberNode(1); SyntaxNode root = new FunctionOrDistributionNode(left, right); Environment environment = new Environment(); environment.AddSymbol("x"); root = SemanticAnalyzer.Analyze(root, environment); Assert.AreEqual("x * 1", root.ToString()); }
private static SyntaxNode AnalyzeAmbiguousFunctionOrDistribution(FunctionOrDistributionNode node) { if (environment.IsPredefinedFunction(node.Identifier.Value)) { return(CreateFunctionNode(node.Identifier, node.Expression)); } EnvironmentVariable definition = environment.Get(node.Identifier.Value); if (definition.IsTypeOf(EnvironmentVariableType.Function)) { return(CreateFunctionNode(node.Identifier, node.Expression)); } return(CreateMultiplicationNode(node.Identifier, node.Expression)); }