private static Func <double, double> CompileNumber(TerminalSyntaxNode node, CompilationContext context) { if (!double.TryParse(node.Token.Text, NumberStyle, context.CultureInfo, out double constant)) { context.AddError(ErrorType.InvalidNumber, node); return(null); } return(x => constant); }
private static Func <double, double> CompileIdentifier(TerminalSyntaxNode node, CompilationContext context) { string name = node.Token.Text; if (string.Equals(name, "x", StringComparison.OrdinalIgnoreCase)) { return(x => x); } double?constant = context.Symbols.ResolveIndentifier(name); if (constant == null) { ErrorType error = context.Symbols.IsKnownFunction(name) ? ErrorType.ParenthesesRequired : ErrorType.UnknownIdentifier; context.AddErrorWithParameter(error, node); return(null); } return(x => constant.Value); }