Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }